Пользовательское поле, созданное в add_meta_boxes, снова появляется в пользовательском метабоксе по умолчанию - PullRequest
1 голос
/ 21 февраля 2020

Мне удалось создать метабокс с настраиваемым полем внутри, и я ограничил его отображение в настраиваемом типе записи.

//define metabox
function product_info_en() {
    add_meta_box( 'english_info', 'English Info', 'english_product_name_callback', array('product'), 'normal', 'high' );
}

//add to hook
add_action( 'add_meta_boxes', 'product_info_en' );

Код для отображения на странице продукта:

// display in add product admin page
function english_product_name_callback( $post ) {
    //ob_start();
    $content = esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );

        //here goes the custom field
        echo '<fieldset><div><label><b>English Product Name:</b></label><br/>';
        echo '<input id="product_name_en" type="text" name="product_name_en" style="width:100%; margin:10px 0px"';
        echo ' value="';
        echo esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );
        echo '"></div></fieldset>';

        //here goes the wp_editor
        echo '<fieldset><div><label><b>English Product Content Info:</b></label><div><br/>';
        echo '<div>';
        wp_editor($content, 'product_desc_en', array(
            'wpautop' => true,
            'media_buttons' => true,
            'textarea_rows' => 10
            )
            );
        echo '</div></fieldset>';
}

Ниже приведен код, выполняющий задание на сохранение:

//save
function enginfo_save_meta_box( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
    if ( $parent_id = wp_is_post_revision( $post_id ) ) {
        $post_id = $parent_id;
    }
    $fields = [
        'product_name_en',
    ];
    foreach ( $fields as $field ) {
        if ( array_key_exists( $field, $_POST ) ) {
            update_post_meta( $post_id, $field, sanitize_text_field( $_POST[$field] ) );
        }
     }
    update_post_meta( $post_id,'product_desc_en', wp_kses_post( $_POST['product_desc_en'] ) );
}
add_action( 'save_post', 'enginfo_save_meta_box' );

Однако пользовательское поле, которое должно входить только во вновь созданный метабокс, всегда будет отображаться в стандартном «пользовательском» поле». И это происходит со всеми типами сообщений. Как показано ниже, в чем здесь может быть проблема?

enter image description here

1 Ответ

0 голосов
/ 21 февраля 2020

Чтобы скрыть и не показывать свои настраиваемые поля в поле по умолчанию, пожалуйста, добавьте к своим настраиваемым полям подчеркивание _, поэтому product_desc_en станет _product_des_en

Я имею в виду имена ваших настраиваемых полей должны начинаться с префикса подчеркивания, а настраиваемый метабокс WordPress по умолчанию будет игнорировать их и не будет отображаться в WordPress по умолчанию GUI, но вы можете использовать и отображать их в собственных настраиваемых метабоксах, вызывая там новый Подчеркнуть префикс имен.

...