我不太清楚为什么,但我一直在尝试各种不同的解决方案,但似乎都不管用。我交易过update_post_meta
具有add_post_meta
甚至把它分成3个条件,看看它是在添加、更新还是删除,但似乎什么都不起作用。
问题是它实际上不会在更新时保存和显示数据。我知道设置了“\\u desc”,因为当我die()
(就在更新之前)。建议我如何找出为什么它没有更新?
/** Add the Meta Box **/
function add_custom_meta_box() {
global $meta_box;
add_meta_box(
\'short-desc\', // $id
\'Short Description\', // $title
\'show_custom_meta_box\', // $callback
\'post\', // $page
\'side\', // $context
\'high\'); // $priority
}
add_action(\'add_meta_boxes\', \'add_custom_meta_box\');
/** The Callback **/
function show_custom_meta_box() {
global $post;
// Use nonce for verification
echo \'<input type="hidden" name="shortdesc_meta_box_nonce" value="\'.wp_create_nonce(basename(__FILE__)).\'" />\';
// get value of this field if it exists for this post
$meta = get_post_custom($post->ID);
// Begin the field table
echo \'<table class="form-table"><tr><td>\';
echo \'<strong>Enter A Short Description:</strong>
<input type="text" name="_desc" id="short-desc" value="\'.$meta[\'_desc\'].\'" size="30" />\';
echo \'</td></tr></table>\'; // end table
}
/** Save the Data **/
function save_custom_meta($post) {
// verify nonce
if (!wp_verify_nonce($_POST[\'shortdesc_meta_box_nonce\'], basename(__FILE__)))
return $post->ID;
// check autosave
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
return $post->ID;
// check permissions
if (!current_user_can(\'edit_post\', $post->ID))
return $post->ID;
//echo $_POST[\'_desc\'];
//die();
if(isset($_POST[\'_desc\']))
update_post_meta($post->ID, \'_desc\', strip_tags($_POST[\'_desc\']));
}
add_action(\'save_post\', \'save_custom_meta\', 1, 2);
最合适的回答,由SO网友:Vinod Dalvi 整理而成
这是因为save_post hook函数接受post id作为参数,而不是post对象,因此save\\u custom\\u元函数应如下所示。
/** Save the Data **/
function save_custom_meta($post_id) {
// verify nonce
if (!wp_verify_nonce($_POST[\'shortdesc_meta_box_nonce\'], basename(__FILE__)))
return $post_id;
// check autosave
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
return $post_id;
// check permissions
if (!current_user_can(\'edit_post\', $post_id))
return $post_id;
//echo $_POST[\'_desc\'];
//die();
if(isset($_POST[\'_desc\']))
update_post_meta($post_id, \'_desc\', strip_tags($_POST[\'_desc\']));
}
add_action(\'save_post\', \'save_custom_meta\', 1, 2);