Meta Box不保存或更新

时间:2017-04-30 作者:jeff

以下是我用于metabox的代码。

class my_metaboxes{


    public function __construct(){

        add_action(\'add_meta_boxes\', array($this, \'my_overview_metabox\'));
        add_action( \'save_post\', array($this, \'my_content_save\'));
    }

    public function my_overview_metabox(){

        add_meta_box( 

            \'page_overview_metabox\', 
            \'Page content overview\', 
            array($this,\'content_overview_metabox\'), 
            \'post\', 
            \'advanced\', 
            \'high\' 
        );
    }

    public function content_overview_metabox($post){

        wp_nonce_field( \'content_overview_save\', \'content_overview_nonce\');
        $value=get_post_meta($post->ID, \'_post_content_key\', true);

        echo \'<input type="text" id="page_content_overview_metabox" name="page_content_overview_metabox" value="\'.esc_attr($value).\'" placeholder="Enter the page overview details" style="width: 100%; height:120px;"\';

    }

    public function my_content_save($post_id){

       if(!isset($_POST[\'content_overview_nonce\'])){
            return;
       }

       if(!wp_verify_nonce( $_POST[\'content_overview_nonce\'], \'my_content_save\' )){
            return;
       }

       if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE){
            return;
       }

       if(!current_user_can(\'edit_post\', $post_id)){
            return;
       }

       if(!isset($_POST[\'page_content_overview_metabox\'])){
            return;
       }

       $my_data= sanitize_text_field($_POST[\'page_content_overview_metabox\']);

       update_post_meta( $post_id, \'_post_content_key\', $my_data);
    }
}
这些元框将显示在post部分中。但是,我无法保存内容条目。

有人能帮忙吗?

谢谢

1 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

字段未保存的原因是由于nonce签入my_content_save() 弱点将nonce check更改为以下代码将解决此问题:

if (!wp_verify_nonce( $_POST[\'content_overview_nonce\'], \'content_overview_save\' )){
    return;
}
临时检查应使用content_overview_save 操作,因为这是此处指定的内容:

wp_nonce_field( \'content_overview_save\', \'content_overview_nonce\');
请注意,还有一个>#page_content_overview_metabox 输入字段。为完整起见,以下是完整的更新代码:

class my_metaboxes{

    public function __construct() {
        add_action( \'add_meta_boxes\', array( $this, \'my_overview_metabox\' ) );
        add_action( \'save_post\', array( $this, \'my_content_save\' ) );
    }

    public function my_overview_metabox(){
        add_meta_box( 
            \'page_overview_metabox\', 
            \'Page content overview\', 
            array( $this,\'content_overview_metabox\' ), 
            \'post\', 
            \'advanced\', 
            \'high\' 
        );
    }

    public function content_overview_metabox( $post ) {
        wp_nonce_field( \'content_overview_save\', \'content_overview_nonce\' );
        $value = get_post_meta( $post->ID, \'_post_content_key\', true );

        echo \'<input type="text" id="page_content_overview_metabox" name="page_content_overview_metabox" value="\' . 
     esc_attr( $value ) . \'" placeholder="Enter the page overview details" style="width: 100%; height:120px;">\';

    }

    public function my_content_save( $post_id ){
       if ( ! isset($_POST[\'content_overview_nonce\'])){
            return;
       }

       if ( ! wp_verify_nonce( $_POST[\'content_overview_nonce\'], \'content_overview_save\' ) ) {
            return;
       }

       if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
            return;
       }

       if ( ! current_user_can( \'edit_post\', $post_id ) ) {
            return;
       }

       if ( !isset( $_POST[\'page_content_overview_metabox\'] ) ) {
            return;
       }

       $my_data = sanitize_text_field( $_POST[\'page_content_overview_metabox\'] );
       update_post_meta( $post_id, \'_post_content_key\', $my_data );
       }
}

new my_metaboxes();

相关推荐

保存Metabox内容无效

我正在尝试保存一个metabox输入,但它似乎不起作用。我使用的是数组(因为我需要我的metabox有60行),所以我假设问题就出在数组中。这是我为管理员提供的metabox函数(它可以正确显示我要显示的信息):function mock_metabox() { global $post; // Nonce field wp_nonce_field( basename( __FILE__ ), \'mock_fields\' ); // in