将特殊的元框添加到自定义帖子类型

时间:2015-05-01 作者:cgscolonia

我已经成功地在我的自定义帖子类型中添加了一个元框(请参见下面的代码),现在我需要添加另一个元框。使用此框,我想显示/编辑另一个名为wp\\u project\\u bids\\u mitglied的表中的值。此表包含一行post ID和一行值(0,1,2),我想在后端编辑/显示这些值。如何更改代码以实现此目标?谢谢

function add_custom_meta_box() {
add_meta_box(
    \'custom_meta_box\', // $id
    \'Dauer\', // $title
    \'show_custom_meta_box\', // $callback
    \'project\', // $page
    \'normal\', // $context
    \'high\'); // $priority
}
add_action(\'add_meta_boxes\', \'add_custom_meta_box\');

// Field Array
$prefix = \'custom_\';
$custom_meta_fields = array(


array(
    \'label\'=> \'Select Box\',
    \'desc\'  => \'Fotoauftrag Dauer angeben\',
    \'id\'    => $prefix.\'dauer\',
    \'type\'  => \'select\',
    \'options\' => array (
        \'one\' => array (
            \'label\' => \'1-3\',
            \'value\' => \'a\'
        ),
        \'two\' => array (
            \'label\' => \'3-6\',
            \'value\' => \'b\'
        ),
        \'three\' => array (
            \'label\' => \'6-9\',
            \'value\' => \'c\'
        ),
        \'four\' => array (
            \'label\' => \'>9\',
            \'value\' => \'d\'
                  )
    )
)
);

// The Callback
function show_custom_meta_box() {
global $custom_meta_fields, $post;
// Use nonce for verification
echo \'<input type="hidden" name="custom_meta_box_nonce" value="\'.wp_create_nonce(basename(__FILE__)).\'" />\';

// Begin the field table and loop
echo \'<table class="form-table">\';
foreach ($custom_meta_fields as $field) {
    // get value of this field if it exists for this post
    $meta = get_post_meta($post->ID, $field[\'id\'], true);
    // begin a table row with
    echo \'<tr>
            <th><label for="\'.$field[\'id\'].\'">\'.$field[\'label\'].\'</label></th>
            <td>\';
            switch($field[\'type\']) {
                // case items will go here
                // text



case \'select\':
echo \'<select name="\'.$field[\'id\'].\'" id="\'.$field[\'id\'].\'">\';
foreach ($field[\'options\'] as $option) {
    echo \'<option\', $meta == $option[\'value\'] ? \' selected="selected"\' : \'\', \' value="\'.$option[\'value\'].\'">\'.$option[\'label\'].\'</option>\';
}
echo \'</select><br /><span class="description">\'.$field[\'desc\'].\'</span>\';
break;
            } //end switch
    echo \'</td></tr>\';
} // end foreach
echo \'</table>\'; // end table
}

// Save the Data
function save_custom_meta($post_id) {
global $custom_meta_fields;

// verify nonce
if (!wp_verify_nonce($_POST[\'custom_meta_box_nonce\'], basename(__FILE__)))
    return $post_id;
// check autosave
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
    return $post_id;
// check permissions
if (\'page\' == $_POST[\'post_type\']) {
    if (!current_user_can(\'edit_page\', $post_id))
        return $post_id;
    } elseif (!current_user_can(\'edit_post\', $post_id)) {
        return $post_id;
}

// loop through fields and save the data
foreach ($custom_meta_fields as $field) {
    $old = get_post_meta($post_id, $field[\'id\'], true);
    $new = $_POST[$field[\'id\']];
    if ($new && $new != $old) {
        update_post_meta($post_id, $field[\'id\'], $new);
    } elseif (\'\' == $new && $old) {
        delete_post_meta($post_id, $field[\'id\'], $old);
    }
} // end foreach
}

1 个回复
最合适的回答,由SO网友:Mayeenul Islam 整理而成

所有代码都是为了复制流程,而不是给出实际的代码。您必须弄清楚您的流程如何满足此场景。我对每一行都发表了评论,请查看内联评论以获得正确的理解。

步骤#1

首先,代码的第一部分生成一个自定义元框,因此使用该部分首先生成元框:

<?php
//making the meta box (Note: meta box != custom meta field)
function wpse_add_custom_meta_box_2() {
   add_meta_box(
       \'custom_meta_box-2\',       // $id
       \'Dauer2\',                  // $title
       \'show_custom_meta_box_2\',  // $callback
       \'project\',                 // $page
       \'normal\',                  // $context
       \'high\'                     // $priority
   );
}
add_action(\'add_meta_boxes\', \'wpse_add_custom_meta_box_2\');
?>
因此,您的元框现在已准备就绪。现在,您必须创建一些表单字段来获取用户数据,为此,我们使用$callback 我们刚才声明的函数:

<?php
//showing custom form fields
function show_custom_meta_box_2() {
    global $post;

    // Use nonce for verification to secure data sending
    wp_nonce_field( basename( __FILE__ ), \'wpse_our_nonce\' );

    ?>

    <!-- my custom value input -->
    <input type="number" name="wpse_value" value="">

    <?php
}
?>
步骤3在post保存上,两个字段将post 价值观,现在我们必须把它们保存在我们想要保存它们的地方。

<?php
//now we are saving the data
function wpse_save_meta_fields( $post_id ) {

  // verify nonce
  if (!isset($_POST[\'wpse_our_nonce\']) || !wp_verify_nonce($_POST[\'wpse_our_nonce\'], basename(__FILE__)))
      return \'nonce not verified\';

  // check autosave
  if ( wp_is_post_autosave( $post_id ) )
      return \'autosave\';

  //check post revision
  if ( wp_is_post_revision( $post_id ) )
      return \'revision\';

  // check permissions
  if ( \'project\' == $_POST[\'post_type\'] ) {
      if ( ! current_user_can( \'edit_page\', $post_id ) )
          return \'cannot edit page\';
      } elseif ( ! current_user_can( \'edit_post\', $post_id ) ) {
          return \'cannot edit post\';
  }

  //so our basic checking is done, now we can grab what we\'ve passed from our newly created form
  $wpse_value = $_POST[\'wpse_value\'];

  //simply we have to save the data now
  global $wpdb;

  $table = $wpdb->base_prefix . \'project_bids_mitglied\';

  $wpdb->insert(
            $table,
            array(
                \'col_post_id\' => $post_id, //as we are having it by default with this function
                \'col_value\'   => intval( $wpse_value ) //assuming we are passing numerical value
              ),
            array(
                \'%d\', //%s - string, %d - integer, %f - float
                \'%d\', //%s - string, %d - integer, %f - float
              )
          );

}
add_action( \'save_post\', \'wpse_save_meta_fields\' );
add_action( \'new_to_publish\', \'wpse_save_meta_fields\' );
?>
由于您正在处理定制表,因此我们坚持$wpdb 类来安全地存储必要的数据。

Please note, 这不是您需要的代码,这是您现在可以如何塑造您的路径的想法和过程。记住两件事:

  1. show_custom_meta_box_2() 是HTML表单所在的区域,请将此部分视为简单的HTML表单,然后wpse_save_meta_fields() 连接到必要的操作,将在发布/保存/更新帖子时保存表单的数据。在这里进行适当的消毒和验证recent chat. <;3.

结束

相关推荐

使用Windows身份验证连接到MySQL

是否可以使用Wordpress/PHP连接到我的MySQL数据库Windows Authentication 在IIS上?我可以使用普通的MySQL命令行实用程序很好地连接。我得到了以下错误:Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [authentication_windows_client] in c:\\wordpress\\wp-includes\