Функция шорткода Wordpress возвращает только заголовок - PullRequest
0 голосов
/ 05 мая 2020

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

  • Контент взят со страницы.
  • Функция объявлена ​​в файле темы functions. php.
  • Использование идентификатора сообщения (страницы).

        function shtcode_Func( $atts = array() ) {
    
      // set up default parameters
       extract(shortcode_atts(array(
        'id' => '5'
       ), $atts));
    
       $my_postid = $atts;//This is page id or post id
       $content_post = get_post($my_postid);
       $content = $content_post->post_content;
       $content = apply_filters('the_content', $content);
       $content = str_replace(']]>', ']]>', $content);
    
       return $content;
    }
    
    add_shortcode('shortcodePage', 'shtcode_Func');
    

Вызов из виджета с помощью [shortcodePage id=POST_ID] (int)

Результат: печатает только заглавие. Я попытался изменить фильтр с помощью 'the_post_thumbnail' и снова получил заголовок.

Я в отчаянии: (

Спасибо !!

Ответы [ 2 ]

1 голос
/ 05 мая 2020

В вашей функции шорткода есть несколько ошибок, но основные моменты:

  1. Вы используете extract, но не используете ничего из extract
  2. $atts - это массив, а не только id.
  3. Вы используете apply_filters('the_content'). Это по существу перезаписывает WP, встроенные в apply_filter. Вы хотите использовать add_filter, но, как видите, в этом нет необходимости.

Вот шорткод, урезанный тем, что вы пытаетесь сделать:

function shtcode_Func( $atts ) {

    // set up default parameters. No need to use extract here.
    $a = shortcode_atts(array(
        'id' => ''
    ), $atts);

    // Use get_the_content, and pass the actual ID
    $content = get_the_content('','', $a['id'] );
    // This is the same
    $content = str_replace(']]>', ']]>', $content);
    // Return the content.
    return $content;
}

add_shortcode('shortcodePage', 'shtcode_Func');
0 голосов
/ 05 мая 2020
Try to use like this:
function shtcode_Func( $atts = array() ) {

    // set up default parameters
    extract(shortcode_atts(array(
        'id' => '5'
    ), $atts));

    $content_post = get_post( $atts['id'] );
    ob_start();
    $content = $content_post->post_content;
    $content = apply_filters( 'the_content', $content );
    $content = str_replace( ']]>', ']]>', $content );
    echo $content;
    $str = ob_get_contents();

    ob_end_clean();

    return $str;
}

add_shortcode('shortcodePage', 'shtcode_Func');
...