我在自定义帖子类型中制作了自定义元数据箱。我的自定义元数据包括两个单选按钮。但无论我做什么,我都无法在我的数据库中保存数据。 Wordpress将其数据保存在“wp_postmeta”中,但不保存我想要保存的自定义数据。这是我的代码:
function wp_add_custom_meta_boxes(){
add_meta_box("custom_meta", "Settings", "wp_meta_box_callback", "images", "normal");
}
add_action("add_meta_boxes", "wp_add_custom_meta_boxes");
function wp_meta_box_callback($post){
wp_nonce_field(basename(__FILE__), "wp_custom_image_nonce");
?>
<div class="meta-row">
<div class="meta-th">
<p>Should this image show on the main page ?</p>
</div>
<div class="meta-td">
<label for="yes">Yes</label>
<input id="yes" type="radio" name="on_mainpage" value="true">
<label for="no">No</label>
<input id="no" type="radio" name="on_mainpage" value="false">
</div>
</div>
<?php
}
function wp_save_meta_info($post_id){
if(!wp_verify_nonce("wp_custom_image_nonce", basename(__FILE__))){
return;
}
if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE){
return $post_id;
}
if(isset($_POST['on_mainpage'])){
update_post_meta($post_id, "show_on_mainpage", $_POST['on_mainpage']);
}
}
add_action("save_post", "wp_save_meta_info");
我还有一个问题。 update_post_meta()是否要求更新数据库中的某些现有数据,或者如果数据不存在则会自动将数据保存在数据库中吗?
提前致谢:)
答案 0 :(得分:0)
你的更新帖子元函数中有一个拼写错误
function wp_save_meta_info($post_id){
if(!wp_verify_nonce($_POST["wp_custom_image_nonce"], basename(__FILE__))){
return;
}
if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE){
return $post_id;
}
if(isset($_POST['on_mainpage'])){
update_post_meta($post_id, "show_on_mainpage", $_POST['on_mainpage']);
}
}
还要指出自定义帖子类型的自定义save_post挂钩
挂钩被称为 - save_post_yourpostypename
所以
add_action("save_post_posttype", "wp_save_meta_info");
否则,您需要在函数中检查其正确的帖子类型,或者在自定义帖子类型中使用唯一的随机数名称。另外我建议你的nonce使用不同的动作,如果你将来调试一段时间,描述性和独特性会更好
update_post_meta()
将为您的字段名称创建一个元条目,如果它不存在,那么开发人员更喜欢add_post_meta(),当该字段名称应该只有1个元条目时,即数据应该更新在帖子保存而不是创建新的元条目。您可以在postmeta db表上看到postmeta条目。