我在WordPress中创建了一个名为“百科全书”的CPT。然后,我在其中创建了几个元字段,只是一些简单的文本字段,但是目前它们还没有保存,我不知道为什么。有人可以帮忙吗?
/*
=========================================================================
Custom Meta Fields - English version
=========================================================================
*/
function custom_meta_box_markup()
{
wp_nonce_field(basename(__FILE__), "meta-box-nonce");
?>
<div>
<label for="english_version">Description</label>
<input name="english_version" type="text" value="<?php echo get_post_meta($object->ID, "english_version", true); ?>">
</div>
<?php }
function add_custom_meta_box()
{
add_meta_box("english_version", "English Version", "custom_meta_box_markup", "encyclopedia", "advanced", "high", null);
//add_meta_box("german-version", "German Version", "custom_meta_box_markup", "encyclopedia", "advanced", "high", null);
}
add_action("add_meta_boxes", "add_custom_meta_box");
function save_custom_meta_box($post_id, $post, $update)
{
if (!isset($_POST["meta-box-nonce"]) || !wp_verify_nonce($_POST["meta-box-nonce"], basename(__FILE__))){
return $post_id;
}
if(!current_user_can("edit_post", $post_id)){
return $post_id;
}
if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE){
return $post_id;
}
$slug = "post";
if($slug != $post->post_type){
return $post_id;
}
$meta_box_text_value = "";
if(isset($_POST["english_version"]))
{
$meta_box_text_value = $_POST["english_version"];
}
update_post_meta($post_id, "english_version", $meta_box_text_value);
}
add_action("save_post_encyclopedia", "save_custom_meta_box", 10, 3);
相关代码在上面,我目前将其存储在子主题的functions.php文件中。
谢谢
答案 0 :(得分:1)
根据我对您的问题的评论,修正了问题后,代码仍然有问题。
在元框输出函数custom_meta_box_markup
上,您使用的是get_post_meta($object->ID, "english_version", true)
,而没有定义$object
。
我已经测试了您的代码,并且您的数据已保存在DB中。但是由于$object->ID
不返回任何内容,因此在输入文本字段上未显示任何内容。 custom_meta_box_markup
收到一个$post
对象,您错过了它。像这样更新您的代码:
function custom_meta_box_markup($post) {
wp_nonce_field(basename(__FILE__), "meta-box-nonce");
?>
<div>
<label for="english_version">Description</label>
<input name="english_version" type="text" value="<?php echo get_post_meta($post->ID, "english_version", true); ?>">
</div>
<?php }