不确定为什么我的自定义帖子元字段不能保存

时间:2013-06-08 作者:Jake Lisby

我在保存自定义帖子元字段时遇到问题,我不太清楚原因。我正在学习位于http://blog.teamtreehouse.com/create-your-first-wordpress-custom-post-type 而且对那篇文章中发生的特殊字符爆炸进行反编码有很大困难。。。非常感谢您的帮助。

add_action("admin_init", "admin_init");

function admin_init(){
  add_meta_box("job_location", "Job Location", "location_callback", "job_or_internship", "side", "default");
  add_meta_box("start_date", "Start Date", "start_callback", "job_or_internship", "side", "default");
}

function location_callback(){
  global $post;
  $custom = get_post_custom($post_ID);
  $location_callback = $custom["location_callback"];
  ?>
  <label>Job Location:</label>
  <input name="year_completed" value="<?php echo $location_callback; ?>">
  <?php
}

function start_callback() {
  global $post;
  $custom = get_post_custom($post_ID);
  $start_callback = $custom["start_callback"][0];
  ?>
  <label>Start Date:</label>
  <input name="start_callback" value="<?php echo $start_callback; ?>">
  <?php
}

add_action(\'save_post\', \'save_details\');
function save_details(){
  global $post;

  update_post_meta($post_ID, "location_callback", $_POST["location_callback"]);
  update_post_meta($post_ID, "start_callback", $_POST["start_callback"]);
}

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

使用两个可接受的参数注册保存处理程序:

add_action(\'save_post\', \'save_details\', 10, 2 );
现在有两个重要参数:

function save_details( $post_id, $post ) {}
第一个是post ID,第二个是完整的post对象。不要依赖全局post对象。在某些情况下,它不可用,例如,批量编辑。

然后在metabox输出中使用nonce字段,确保只处理每个框发送的值:

echo wp_nonce_field( \'job_location\', \'_nonce_job_location\' );
在保存处理程序中,使用以下命令验证nonce:

if ( ! wp_verify_nonce( $_POST[ \'_nonce_job_location\' ], \'job_location\' ) )
    return;
在自动保存请求期间,不会发送额外字段,因此在DOING_AUTOSAVE ist定义:

if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
    return;
并测试是否允许用户编辑当前帖子:

if ( ! current_user_can( \'edit_post\', $post_id ) )
    return;
在所有这些检查之后,您可以保存或删除数据。

结束

相关推荐