添加新页面时出现未定义的‘POST_TYPE’错误

时间:2016-04-02 作者:Sanjay Goswami

我为页面创建了一个元框,请参见以下代码:

add_action(\'add_meta_boxes\', \'add_metaboxes\');

function add_metaboxes() {
    add_meta_box(
        \'wpt_slider_meta\',
        \'Add Slider Image\',
        \'wpt_slider_meta\',
        \'slider\',
        \'normal\',
        \'default\'
    );      
}

function wpt_slider_meta() {
    global $post;

    wp_nonce_field(plugins_url(__FILE__), \'meta_slider_noncename\');

    $values = get_post_meta($post->ID, \'_meta-slider_img\', true);

    // Some html and scripts to upload image.
}

add_action( \'save_post\', \'save_slider_img\' );
function save_slider_img( $post_id ) {

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

     if ( \'slider\' == $_POST[\'post_type\']  ) {
        if ( !current_user_can( \'edit_page\', $post_id ) )
            return;
    } else {
        if ( !current_user_can( \'edit_post\', $post_id ) )
            return;
    }

    if(wp_verify_nonce($_POST[\'meta_slider_noncename\'], plugins_url(__FILE__)) )
    {
        $images = $_POST[\'meta-slider_img\'];
        update_post_meta( $post_id, \'_meta-slider_img\', $images );
    }
}
当我点击添加新页面时,我收到了两条警告;除此之外,所有代码都可以正常工作。

Notice: Undefined index: post_type in /var/www/html/transport/wp-content/themes/transport/functions.php on line 192

Notice: Undefined index: meta_slider_noncename in /var/www/html/transport/wp-content/themes/transport/functions.php on line 200

有人能帮忙吗?

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

save_post 在插入或更新帖子时调用。访问“添加新帖子”时,会创建一篇帖子并将其插入数据库。这实际上是草稿。当时$_POST 为空,因此您将看到警告。

Solution:

最好的选择是在没有找到nonce. 和使用isset() 检查钥匙是否存在。

Example:

function save_slider_img( $post_id ) {

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

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

    if(!wp_verify_nonce($_POST[\'meta_slider_noncename\'], plugins_url(__FILE__))) {
        return;
    }

    if (\'slider\' == $_POST[\'post_type\'] && current_user_can( \'edit_page\', $post_id )) { 
        $images = isset($_POST[\'meta-slider_img\']) ? $_POST[\'meta-slider_img\'] : false;
        update_post_meta( $post_id, \'_meta-slider_img\', $images );
    }
}

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {