找到2个ID不唯一的元素(#_ajax_nonce)和(#_wpnonce)

时间:2020-10-13 作者:Ali Mirza

我正在从头开始开发自定义主题,创建自定义帖子类型,并在编辑自定义帖子类型时收到此警告。我还设计了带有两个输入字段的自定义元框,并在其中使用nonce。删除这些警告有什么帮助吗?I am developing custom theme from scratch and creates a custom post type and getting this warning while editing custom post type. I also design custom Meta box with two input fields and using nonce in it. Any help removing these warning?

下面是函数中自定义元框的代码。php

//Custom Metabox

function register_book_meta_box(){
    add_meta_box(\'book_meta_box_id\', \'Book Detail\',\'design_book_meta_box\',\'books\',\'advanced\',\'high\');
}
add_action(\'add_meta_boxes\',\'register_book_meta_box\');

function design_book_meta_box($post){
    wp_nonce_field(basename(__FILE__),\'book_cpt_nonce\')
    ?>
        <div>
            <label for="book-author">Author Name&nbsp;&nbsp;</label>
            <input type="text" name="book-author" placeholder="Author Name" value="<?php echo get_post_meta( $post->ID, \'book-author-key\', true );?>">
        </div>
        <div>
            <label for="year">Published Year</label>
            <input type="number" id="year" name="year" min="1455" max="2020" value="<?php echo get_post_meta( $post->ID, \'book-year-key\', true );?>">
            <span id="errorMsg" style="display:none;">Published Year Must be range from 1455 - 2020</span>
        </div>

    <?php
}
function save_book_meta_data($post_id)
{
    if(!isset($_POST[\'book_cpt_nonce\']) || !wp_verify_nonce($_POST[\'book_cpt_nonce\'],basename(__FILE__))){
        return $post_id;
    }
    if (array_key_exists(\'book-author\', $_POST)) {
        update_post_meta( $post_id,\'book-author-key\', $_POST[\'book-author\']
        );
    }
    if (array_key_exists(\'year\', $_POST)) {
        update_post_meta( $post_id,\'book-year-key\', $_POST[\'year\']
        );
    }
}
add_action(\'save_post\', \'save_book_meta_data\');

1 个回复
SO网友:Tony Djukic

阿里,正如评论中提到的,这里是我用来保存的方法。如您所见,它设置了分类字段,然后一次性运行保存过程,而不是反复设置每个字段的逻辑。

function save_book_meta_data( $post_id ) {
    if( !current_user_can( \'edit_post\', $post_id ) ) {
            return $post_id;
        }
        if( !isset( $_POST[\'book_cpt_nonce\'] ) || !wp_verify_nonce( $_POST[\'book_cpt_nonce\'], basename( __FILE__ ) ) ) {
            return $post_id;
        }
        $ali_book_meta[\'book-author-key\']       = esc_textarea( $_POST[\'book-author-key\'] );
        $ali_book_meta[\'book-year-key\']         = esc_textarea( $_POST[\'book-year-key\'] );
        foreach( $ali_book_meta as $key => $value ) :
            if( \'revision\' === $post->post_type ) {
                return;
            }
            if( get_post_meta( $post_id, $key, false ) ) {
                update_post_meta( $post_id, $key, $value );
            } else {
                add_post_meta( $post_id, $key, $value);
            }
            if( !$value ) {
                delete_post_meta( $post_id, $key );
            }
        endforeach;
}
add_action( \'save_post\', \'save_book_meta_data\', 1, 2 );
我不知道这是否解决了您的实际问题,但您可以尝试一下,看看会发生什么。

它确实确保只有具有编辑功能的用户才能进行更改,并避免更新修订,因为它们不应该更新,否则它们就不是修订,而是克隆。

相关推荐

如何在Metabox中获取默认复选框为真?

默认情况下,无法将我的元字段复选框设置为true。除了默认值之外,其他一切都正常工作。我知道有很多问题和答案,但我什么都试过了,还是没能得到。这是我的代码:function theme_add_meta_box() { add_meta_box( \'theme_post_sidebar_option\', esc_html__( \'Additional Options\', \'theme\' ), \'theme_post_sidebar_settings\', \'post\',