PHP通知:未定义索引:myheme_meta_box_nonce

时间:2020-03-12 作者:ahmet kaya

调试中的元数据库有一个错误。日志:

[12-Mar-2020 13:00:05 UTC] PHP Notice:  Undefined index: mytheme_meta_box_nonce in /home/deniztas/migrate666.deniz-tasarim.site/wp-content/themes/html5blank-stable/functions.php on line 330
330页。生产线:

if (!wp_verify_nonce($_POST[\'mytheme_meta_box_nonce\'], basename(__FILE__))) {
在函数中。php,metabox代码段:

/*
 * Plugin Name: Metabox
 * Author: Burak Şahin
 * Author URI: https://buraksah.in/
 */

$prefix = \'ozellikler_\';

$meta_box = array(
    \'id\' => \'my-meta-box\',
    \'title\' => \'Custom meta box\',
    \'page\' => \'post\',
    \'context\' => \'normal\',
    \'priority\' => \'high\',
    \'fields\' => array(
        array(
            \'name\' => \'Text box\',
            \'desc\' => \'Enter something here\',
            \'id\' => $prefix . \'text\',
            \'type\' => \'text\',
            \'std\' => \'Default value 1\'
        ),
        array(
            \'name\' => \'Text box\',
            \'desc\' => \'Enter something here\',
            \'id\' => $prefix . \'text-ruby\',
            \'type\' => \'text\',
            \'std\' => \'Default value 1\'
        ),
        array(
            \'name\' => \'Textarea\',
            \'desc\' => \'Enter big text here\',
            \'id\' => $prefix . \'textarea\',
            \'type\' => \'textarea\',
            \'std\' => \'Default value 2\'
        ),
        array(
            \'name\' => \'image\',
            \'desc\' => \'Enter big text here\',
            \'id\' => $prefix . \'image\',
            \'type\' => \'image\',
            \'std\' => \'Default value 2\'
        ),



        array(
            \'name\' => \'Checkbox\',
            \'id\' => $prefix . \'checkbox\',
            \'type\' => \'checkbox\'
        )
    )
);

add_action(\'admin_menu\', \'mytheme_add_box\');

// Add meta box
function mytheme_add_box() {
    global $meta_box;

    add_meta_box($meta_box[\'id\'], $meta_box[\'title\'], \'mytheme_show_box\', $meta_box[\'page\'], $meta_box[\'context\'], $meta_box[\'priority\']);
}

// Callback function to show fields in meta box
function mytheme_show_box() {
    global $meta_box, $post;

    // Use nonce for verification
    echo \'<input type="hidden" name="mytheme_meta_box_nonce" value="\', wp_create_nonce(basename(__FILE__)), \'" />\';

    echo \'<table class="form-table">\';

    foreach ($meta_box[\'fields\'] as $field) {
        // get current post meta data
        $meta = get_post_meta($post->ID, $field[\'id\'], true);

        echo \'<tr>\',
        \'<th style="width:20%"><label for="\', $field[\'id\'], \'">\', $field[\'name\'], \'</label></th>\',
        \'<td>\';
        switch ($field[\'type\']) {
            case \'text\':
                echo \'<input type="text" name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'" value="\', $meta ? $meta : $field[\'std\'], \'" size="30" style="width:97%" />\',
                \'<br />\', $field[\'desc\'];
                break;
            case \'textarea\':
                echo \'<textarea name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'" cols="60" rows="4" style="width:97%">\', $meta ? $meta : $field[\'std\'], \'</textarea>\',
                \'<br />\', $field[\'desc\'];
                break;
            case \'checkbox\':
                echo \'<input type="checkbox" name="\', $field[\'id\'], \'" id="\', $field[\'id\'], \'"\', $meta ? \' checked="checked"\' : \'\', \' />\';
                break;
        }
        echo \'<td>\',
        \'</tr>\';
    }

    echo \'</table>\';
}

add_action(\'save_post\', \'mytheme_save_data\');

// Save data from meta box
function mytheme_save_data($post_id) {
    global $meta_box;

    // verify nonce
    if (!wp_verify_nonce($_POST[\'mytheme_meta_box_nonce\'], basename(__FILE__))) {
        return $post_id;
    }

    // check autosave
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
        return $post_id;
    }

    // check permissions
    if (\'page\' == $_POST[\'post_type\']) {
        if (!current_user_can(\'edit_page\', $post_id)) {
            return $post_id;
        }
    } elseif (!current_user_can(\'edit_post\', $post_id)) {
        return $post_id;
    }

    foreach ($meta_box[\'fields\'] as $field) {
        $old = get_post_meta($post_id, $field[\'id\'], true);
        $new = $_POST[$field[\'id\']];

        if ($new && $new != $old) {
            update_post_meta($post_id, $field[\'id\'], $new);
        } elseif (\'\' == $new && $old) {
            delete_post_meta($post_id, $field[\'id\'], $old);
        }
    }
}

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

您应该始终检查POST变量(或数组中的项/键,如superglobal$_POST 变量)在尝试使用它之前存在。你可以使用isset() 像这样:

if (
    // Check if the variable is set.
    isset( $_POST[\'mytheme_meta_box_nonce\'] ) &&
    // .. before accessing the value.
    ! wp_verify_nonce( $_POST[\'mytheme_meta_box_nonce\'], basename( __FILE__ ) )
)
你应该知道mytheme_save_data() 每次save_post 无论请求的来源是什么(例如,没有mytheme_meta_box_nonce 输入),因此您应该检查输入是否已实际提交。

此外,使用empty() 像这样:

if (
    // Bail if the nonce is empty.
    empty( $_POST[\'mytheme_meta_box_nonce\'] ) ||
    // .. or that it has expired.
    ! wp_verify_nonce( $_POST[\'mytheme_meta_box_nonce\'], basename( __FILE__ ) )
)

相关推荐

Metabox中的WP_LIST_TABLE在单击搜索按钮时不起作用

我试图在元框中显示WP\\U List\\U表。metabox用于列出课程的注册用户(StreetLMS课程帖子类型)。表格列包含user\\u id、user\\u name、percentage&;等级。我不认为这是一个事实,我正试图为一个自定义的帖子类型。我只是为了清楚起见才提到。现在的情况是,在我单击自定义帖子类型编辑屏幕上的“按Id搜索”(使用的wp搜索按钮功能)按钮之前,一切看起来都很好。WP\\u List\\u表将重定向回/WP admin/edit。php页面上单击搜索按钮(在输入