无法保存自定义元数据数据

时间:2016-01-15 11:28:34

标签: wordpress custom-post-type meta-boxes

我在自定义帖子类型中制作了自定义元数据箱。我的自定义元数据包括两个单选按钮。但无论我做什么,我都无法在我的数据库中保存数据。 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()是否要求更新数据库中的某些现有数据,或者如果数据不存在则会自动将数据保存在数据库中吗?

提前致谢:)

1 个答案:

答案 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条目。