UPDATE_POST_META和GET_POST_META无效

时间:2014-09-17 作者:Femi

我试图从文本框中获取输入,并在更新时显示它。

我不知道update_post_metaget_post_meta 是导致问题的原因。

代码

//Metabox Hook
add_action(\'add_meta_boxes\',\'stars_meta_box\');
//Metabox Init
function stars_meta_box(){
    global $post;
    add_meta_box(\'first_name_meta_box\',
    \'First Name\',\'first_name_meta_box_html\',\'spark_stars\',\'normal\',\'default\');
}
//Metabox Html
function first_name_meta_box_html(){
    wp_nonce_field(\'first_name\',\'first_name_meta_box_nonce\');
    $value = get_post_meta( $post->ID, \'first_name_meta_box_key\', true ); ?>
    <label>First Name: </label> <input type="text" name="fname" value="<?php echo $value; ?>"/>
<?php }

//Save Hook
add_action( \'save_post\', \'save_meta_box\' );
//Save Metabox Value
function save_meta_box(){
    global $post;
    update_post_meta( $post->ID, "first_name_meta_box_key", $_POST["fname"]); 
} 
问题是,当我在文本框中键入一个值并更新页面时,文本框仍然为空。

1 个回复
最合适的回答,由SO网友:Tomás Cot 整理而成

尝试使用此代码,

    //Metabox Hook
add_action(\'add_meta_boxes\',\'stars_meta_box\');
//Metabox Init
function stars_meta_box(){

    add_meta_box(\'first_name_meta_box\',
    \'First Name\',\'first_name_meta_box_html\',\'spark_stars\',\'normal\',\'default\'););
}
//Metabox Html
function first_name_meta_box_html($post){
    wp_nonce_field(\'first_name\',\'first_name_meta_box_nonce\');
    $value = get_post_meta( $post->ID, \'first_name_meta_box_key\', true );

    echo \'<label>First Name: </label> <input type="text" name="fname" value="\' . esc_attr($value) . \'"/>\';
 }

//Save Hook
add_action( \'save_post\', \'my_save_meta_box\' );
//Save Metabox Value
function my_save_meta_box($post_id){
    //you might want this or not
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
        return;
    }

    if ( isset($_POST[\'first_name_meta_box_nonce\']) && ! wp_verify_nonce( $_POST[\'first_name_meta_box_nonce\'], \'first_name\' ) ) {
        return;
    }



    if(!isset($_POST["fname"])){
        return;

    }
   update_post_meta( $post_id, "first_name_meta_box_key", sanitize_text_field($_POST["fname"])); 
}
在save函数中,我添加了两个检查,第一个是检查是否是“自动保存”,保存草稿时会触发该检查,如果要保存字段的值,即使是在“自动保存”上,也要删除该块。

然后,我检查“nonce”是否有效。

然后我检查字段是否为空。

最后,如果一切正常,我保存值,您可以添加其他内容或更改逻辑,但这些是需要检查的一些基本内容。

Parameters

您可以看到,我在函数中使用了参数,而不是全局“Post”对象。

Data sanitization

我还添加了一些函数来清理数据,对save函数的清理应该足够了,但是太简单了,我还转义了meta-box生成器函数中的值。

我想就是这样,如果你有任何问题,尽管问。

结束

相关推荐

动态复制自定义帖子类型中的自定义Metabox

我正在Wordpress中构建一个自定义帖子类型,用于在客户博客上编写和显示BuzzFeed风格的测验。在自定义帖子类型中,有一个自定义元框,表示每个问题和选择,另一个表示潜在的最终结果。因此,第一个元框由一个数字输入类型(用于分配ID)、一个文本字段(用于输入问题)和另一个字段(用于输入图像)组成。对作者来说,这是他们测验中的第一个问题。如果他们要输入多个问题,则需要选择按钮以添加另一组字段。我不确定如何生成该字段并确保保存任何添加的字段。我不想求助于插件或插件库,因为学习如何做和解决它一样重要。