WordPress публикации контента с короткими кодами для преобразования в обычный HTML - PullRequest
0 голосов
/ 11 января 2019

Сайт электронного обучения Wordpress, разработанный с использованием LearnDash. Необходимо использовать контент поста вне wordpress, но у контента есть шорткоды.

Как мне просто конвертировать шорткод в HTML код, используя функции PHP и wordpress. Ниже приведен пример содержимого:

[vc_row padding_top="0px" padding_bottom="0px" bg_video="" class="" style=""][vc_column fade_animation_offset="45px" width="1/1"][image src="942" alt="" href="" title="" info_content="" lightbox_caption="" id="" class="" style=""][gap size="1.313em" id="" class="" style=""]

Когда я захожу на веб-страницу, она конвертируется в HTML. Но я хочу, чтобы контент HTML только для вышеуказанного контента отображался в мобильном приложении. Я не хочу загружать полную страницу HTML.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

REST API не отображает шорткоды, поэтому вы должны принудительно установить его. Создайте файл wp-content / mu-plugins / render-xyz-shortcodes.php. Возможно, вам придется создать mu-плагин, потому что по умолчанию его там нет.

<?php

/**
* Render the shortcode in wp-json API
*/

add_action( 'rest_api_init', function () {
    register_rest_field(
        'post',
        'content',
        array(
            'get_callback'    => 'render_xyz_do_shortcode',
            'update_callback' => null,
            'schema'          => null,
        )
    );

    register_rest_field(
        'post',
        'excerpt',
        array(
            'get_callback'    => 'render_xyz_do_shortcode',
            'update_callback' => null,
            'schema'          => null,
        )
    );
});

function render_xyz_do_shortcode( $object, $field_name, $request ) {

    global $post;
    $post = get_post($object['id']);

    $output = array();

    //Apply the_content's filter, one of them interpret shortcodes
    switch( $field_name ) {
        case 'content':
            $output['rendered'] =  apply_filters( 'the_content', $post->post_content );
            break;
        case 'excerpt':
            $output['rendered'] =  apply_filters( 'the_excerpt', $post->post_excerpt );
            break;
    }

    $output['protected'] = false;

    return $output;
}
0 голосов
/ 11 января 2019

Проверьте документы на do_shortcode().

Пока у вас есть ядро ​​Wordpress, вы можете запустить его так:

echo do_shortcode('[some_shortcode]');
...