Шорткоды не работают в пользовательском метабоксе

У меня проблема с мета-боксами WordPress. на самом деле я использую платформу WordPress Genesis, и в дочерней теме я создал несколько мета-полей для моего клиента, чтобы показать некоторый контент перед содержимым страницы, но в пользовательском мета-поле я использую wp-editor, и он работает нормально. но проблема в том, что когда я пытаюсь использовать некоторые шорткоды в этом wp-редакторе, он ничего мне не показывает, он просто возвращает весь шорткод как есть.

Я использую https://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress для настраиваемых мета-полей.

И мои коды находятся в файле function.php:

/* -------------------------------------------------------------------------- */
/* Setup Custom metaboxes                                                     */
/* -------------------------------------------------------------------------- */
add_action( 'init', 'be_initialize_cmb_meta_boxes', 9999 );

function be_initialize_cmb_meta_boxes() {
    if ( !class_exists( 'cmb_Meta_Box' ) ) {
        require_once( CHILD_DIR . '/lib/metabox/init.php' );
    }
}

add_filter( 'cmb_meta_boxes', 'cmb_sample_metaboxes' );

function cmb_sample_metaboxes( array $meta_boxes ) {

    // Start with an underscore to hide fields from custom fields list
    $prefix = '_cmb_';

    $meta_boxes[] = array(
        'id'         => 'text_content',
        'title'      => 'Text Content',
        'pages'      => array( 'page', ), // Post type
        'context'    => 'normal',
        'priority'   => 'high',
        'show_names' => true, // Show field names on the left
        'fields'     => array(
            array(
                'name' => 'Custom Content',
                'desc' => 'This is a title description',
                'id'   => $prefix . 'custom_content',
                'type' => 'title',
            ),  
            array(
                'name' => 'Tab Name',
                'desc' => 'Please descibe the tab name (required)',
                'id'   => $prefix . 'tab_name',
                'type' => 'text',
            ),
            array(
                'name'    => 'Test wysiwyg',
                'desc'    => 'field description (optional)',
                'id'      => $prefix . 'test_wysiwyg',
                'type'    => 'wysiwyg',
                'options' => array( 'textarea_rows' => 5, ),
            ),
        ),
    );

    return $meta_boxes;
}

Я сохраняю коды в page.php как:

add_action('genesis_before_loop', 'ehline_before_loop_content');

function ehline_before_loop_content() 
{
    echo genesis_get_custom_field( '_cmb_tab_name' );
    echo '<br />';
    echo genesis_get_custom_field( '_cmb_test_wysiwyg' );
}
genesis();

Но когда я использую шорткоды в этом метабоксе, он возвращает что-то вроде этого

[wptabtitle] Tab 01[/wptabtitle] [wptabcontent]test[/wptabcontent]

Пожалуйста, скажите мне, как я могу использовать шорткоды в wp-editor.


person Jade Sag    schedule 03.12.2012    source источник


Ответы (1)


Вам нужно вызвать do_shortcode() для содержимого ваших настраиваемых полей. Вот как должен выглядеть обновленный код:

add_action('genesis_before_loop', 'ehline_before_loop_content');

function ehline_before_loop_content() 
{
    echo do_shortcode( genesis_get_custom_field( '_cmb_tab_name' ) );
    echo '<br />';
    echo do_shortcode( genesis_get_custom_field( '_cmb_test_wysiwyg' ) );
}
genesis();

Также это не добавит автоматических абзацев, которые вы обычно видите в содержании ваших сообщений. Вы можете сделать две вещи:

echo apply_filters( 'the_content', genesis_get_custom_field( '_cmb_tab_name' ) );

or

echo wpautop( do_shortcode( genesis_get_custom_field( '_cmb_tab_name' ) ) );

Теоретически первый должен быть лучше, но иногда вы можете получить дополнительные выходные данные от функций, подключающихся к фильтру the_content.

person Nikola Ivanov Nikolov    schedule 03.12.2012
comment
Огромное спасибо. Это действительно помогло. - person Jade Sag; 03.12.2012