如何创建一个wordpress插件,为Write / Edit页面添加额外的输入字段

时间:2013-04-08 15:04:57

标签: wordpress plugins input

我正在编写一个插件,需要在创建帖子时使用其他信息。我需要一个文本框,他们将输入一个可以有小数的数字和一个下拉框,它将提供一些选项。我还需要将这些数据与wordpress DB中的其余后期数据一起保存。有人能给我一些帮助吗?

P.S。我稍后需要在显示时向帖子添加一个区域,该区域显示从插件计算的一段数据,但首先是第一件事。

编辑: 我完成了第一部分,但现在我无法使用帖子保存数据的新字段,这是我的代码。

<?php
/*
Plugin Name: Column Height Calculator
Plugin URI: #
Description: calculates the height of the column
Version: 0.1
Author: Ben Crawford
Author URI:
*/

add_action('admin_menu', 'my_post_options_box');

function my_post_options_box() {
add_meta_box('post_info', 'Column Height Info', 'custom_post_info', 'post', 'side', 'high');
}

//Adds the actual option box
function custom_post_info() {
global $post;
?>
<fieldset id="mycustom-div">
<div>
<p>
<label for="column_type" >Column Type:</label>
<br />
<select name="column_type" id="column_type">
  <option value="JBC">Justified Body Copy</option>
  <option value="LRC">Left Raggid Copy</option>
</select>
<br />
<br />
<label for="header_size">Header Size:</label>
<br />
<input type="text" name="header_size" id="header_size" value="<?php echo get_post_meta($post->ID, 'header_size', true); ?>">
</p>
</div>
</fieldset>
<?php
}

add_action('save_post', 'custom_add_save');
function custom_add_save($postID){
// called after a post or page is saved
if($parent_id = wp_is_post_revision($postID))
{
$postID = $parent_id;
}

if ($_POST['column_type']) {
update_custom_meta($postID, $_POST['column_type'], 'column_type');
}
if ($_POST['header_size']) {
update_custom_meta($postID, $_POST['header_size'], 'header_size');
}
}

function update_custom_meta($postID, $newvalue, $field_name) {
// To create new meta
if(!get_post_meta($postID, $field_name)){
add_post_meta($postID, $field_name, $newvalue);
}else{
// or to update existing meta
update_post_meta($postID, $field_name, $newvalue);
}
}
?>

3 个答案:

答案 0 :(得分:3)

您可以使用add_meta_box() wordpress功能编写自己的元框。这将给你最大的控制权。

但是如果您只是使用此元数据来保存帖子中的数据,那么您可以将this Github project合并到您的插件中。这样可以很容易地添加一些保存后元数据的数据字段。然后,您可以使用get_post_meta($post->ID)在循环中获取此元数据。

答案 1 :(得分:0)

我想通了,数据在post meta中保存而不是post。现在一切正常,这是我现在需要添加其他功能的简单部分。

答案 2 :(得分:0)

github.com/CMB2/CMB2 - 这是新的插件版本。看wiki wiki Yoa可以举例如:

/**
 * Initialize the metabox class.
 */
function cmb_initialize_cmb_meta_boxes()
{
    if (!class_exists('cmb_Meta_Box')) {
        require_once(plugin_dir_path(__FILE__) . '../CMB2/init.php');
    }
}
add_action('init', 'cmb_initialize_cmb_meta_boxes', 9999);
add_action( 'cmb2_admin_init', 'cmb2_sample_metaboxes' );
/**
 * Define the metabox and field configurations.
 */
function cmb2_sample_metaboxes() {

    // Start with an underscore to hide fields from custom fields list
    $prefix = '_yourprefix_';

    /**
     * Initiate the metabox
     */
    $cmb = new_cmb2_box( array(
        'id'            => 'test_metabox',
        'title'         => __( 'Test Metabox', 'cmb2' ),
        'object_types'  => array( 'page', 'post'), // Post types
        'context'       => 'normal',
        'priority'      => 'high',
        'show_names'    => true, // Show field names on the left
    ) );

    // Regular text field
    $cmb->add_field( array(
        'name'       => __( 'Test Text', 'cmb2' ),
        'desc'       => __( 'field description (optional)', 'cmb2' ),
        'id'         => $prefix . 'text',
        'type'       => 'text',
        'show_on_cb' => 'cmb2_hide_if_no_cats', // function should return a bool value

    ) );
}