POST保存后,在$_POST中找不到来自metabox的输入值

时间:2017-12-18 作者:haunted85

我想做的是在post editor区域中从metabox(确切地说是一个数字)中获取输入,并将其保存到我之前创建的自定义表中。

这是我的代码,用于仅为post类型声明元盒:

function silly_metabox()
{
    $post_types = array( \'post\' );

    foreach( $post_types as $type )
    {
        add_meta_box(
            \'silly_metabox\',
            \'Silly Metabox\',
            \'silly_display_metabox\',
            $type
        );
    }
}

add_action( \'add_meta_boxes\', \'silly_metabox\' );
同时,metabox的标记是:

function silly_display_metabox( $post )
{
    wp_nonce_field( basename( __FILE__ ), \'silly_extrnum_nonce\' );

    ?>

    <label for="sillyNum">Silly Number</label>
    <input type="number" id="sillyNum" placeholder="Write a number...">

    <?php
}
最后但并非最不重要的一点是保存所有内容的功能:

function silly_save_metabox( $post_id )
{
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );

    $is_valid_nonce = false;

    if ( isset( $_POST[ \'silly_extrnum_nonce\' ] ) )
    {
        if ( wp_verify_nonce( $_POST[ \'silly_extrnum_nonce\' ], basename( __FILE__ ) ) )
        {
            $is_valid_nonce = true;
        }
    }

    if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;

    if (array_key_exists( \'sillyNum\', $_POST ) )
    {
        global $wpdb;
        $wpdb->insert($wpdb->prefix . \'sillydata\', array(
            \'post_id\' => $post_id,
            \'silly_number\' => $_POST[\'sillyNum\']
        ));
    }
}

add_action( \'save_post\', \'silly_save_metabox\' );
把现场消毒放在一边一分钟,为什么$_POST 数组不包含sillyNum 键和插入操作失败或未执行?

1 个回复
SO网友:Sid

这个$_POST[\'\'] 必须包含输入字段的name属性,而不是ID。

因此,要修改您的代码:

function silly_display_metabox( $post )
{
    wp_nonce_field( basename( __FILE__ ), \'silly_extrnum_nonce\' );

    ?>

    <label for="sillyNum">Silly Number</label>
    <input type="number" id="sillyNum" name="sillyNum" placeholder="Write a number...">

    <?php
}
以及

function silly_save_metabox( $post_id )
{
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );

    $is_valid_nonce = false;

    if ( isset( $_POST[ \'silly_extrnum_nonce\' ] ) )
    {
        if ( wp_verify_nonce( $_POST[ \'silly_extrnum_nonce\' ], basename( __FILE__ ) ) )
        {
            $is_valid_nonce = true;
        }
    }

    if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;

    if (array_key_exists( \'sillyNum\', $_POST ) )
    {
        global $wpdb;
        $wpdb->insert($wpdb->prefix . \'sillydata\', array(
            \'post_id\' => $post_id,
            \'silly_number\' => $_POST[\'sillyNum\']
        ));
    }
}

add_action( \'save_post\', \'silly_save_metabox\' );
如果有帮助,请告诉我。

结束

相关推荐

仪表板:10个最后草稿页面和10个最后待审页面(Metabox)

我想在仪表板上显示一些用户角色(管理员、编辑器和auther)。包含10个最后草稿页和10个最后编辑页的框。对于最后编辑的10页,我使用以下自定义:add_action( \'wp_dashboard_setup\', \'admin_dashboard_last_edits_register\' ); function admin_dashboard_last_edits_register() { wp_add_dashboard_widget( __FUNCT