do_shortcode внутри цикла возвращает только содержимое первого сообщения

У меня есть шорткод, который должен возвращать заголовок и контент для нескольких пользовательских сообщений на одной странице. Он правильно отображает заголовок для каждого сообщения, но когда дело доходит до отображения содержимого каждого сообщения, он отображает только содержимое первого сообщения. Что я делаю неправильно?

Выяснить, как получить контент из шорткода, было достаточно сложно, поэтому, если у кого-то есть какие-либо предложения, я буду признателен!

Мой код:

 if($customposts->have_posts() ) : while ($customposts->have_posts() ) : $customposts->the_post();
     $post= get_the_ID();
    $foo = get_the_title();
    $bar=do_shortcode($content);
    echo "<h2>".$foo."</h2><p>".$bar."</p>";    


endwhile; endif;    

2 ответа

Не похоже, что вы нуждаетесь в нас do_shortcode, Если title работает правильно, вы должны быть в состоянии назначить get_the_content() на ваш $bar переменная.

$bar = get_the_content();

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

$html = '';
    if($customposts->have_posts() ) : 
        while ($customposts->have_posts() ) : $customposts->the_post();
        $post= get_the_ID();
        $foo = get_the_title();
        $bar = get_the_content();
        $html .= "<h2>$foo</h2><p>$bar</p>";
    endwhile; endif;

return $html;

Также будьте осторожны при использовании $post как ваша собственная переменная, вы, несомненно, вступите в конфликт с другими скриптами, включая core.

Другие вопросы по тегам