Как создать шорткод для вывода 2 последних записей

26 июн. 2014 г., 12:31:29
Просмотры: 13.9K
Голосов: 2

Я хочу создать шорткод, который будет выводить последние 3 записи на любую страницу...

Он должен выглядеть следующим образом

Заголовок

Краткое описание...Читать далее

Я добавил этот код в functions.php

function my_recent_post()
{
  global $post;

  $html = "";

  $my_query = new WP_Query( array(
       'post_type' => 'post',
       'posts_per_page' => 2
  ));

  if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();

       $html .= "<h2>" . get_the_title() . " </h2>";
       $html .= "<p>" . get_the_excerpt() . "</p>";
       $html .= "<a href=\"" . get_permalink() . "\" class=\"button\">Читать далее</a>";

  endwhile; endif;

  return $html;
}
add_shortcode( 'recent', 'my_recent_post' );

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

Есть предложения как это исправить?

Проблема с дублированием контента

0
Все ответы на вопрос 2
1

Добавьте wp_reset_postdata() после вашего цикла while:

        endwhile;
    wp_reset_postdata();
endif;

Это гарантирует, что после выполнения шорткода будет восстановлен текущий пост, чтобы любые теги шаблона отображали правильные данные.

26 июн. 2014 г. 12:56:46
Комментарии

TheDeadMedic, это сработало, проблема решена, спасибо и благодарю @TBI Infotech

user54779 user54779
27 июн. 2014 г. 02:48:57
2
function my_recent_post()
 {
  global $post;

  $html = "";

  $my_query = new WP_Query( array(
       'post_type' => 'post',
       'posts_per_page' => 2
  ));

  if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();

  $html.= get_template_part( 'content', 'excerpt' );


  endwhile; endif;

  return $html;
 }
 add_shortcode( 'recent', 'my_recent_post' ); ?>

 **<h1>Создайте файл content-excerpt.php и разместите его в вашей теме</h1>

Код этого файла:


<article id="post-<?php the_ID(); ?>">  

    <header class="entry-header">
        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
        </div>
    </header>

    <div class="entry-excerpt">
        <?php the_excerpt(); ?>
    </div>
    <a href="<?php get_permalink() ?>" class="button">Читать далее</a>
</article>
26 июн. 2014 г. 13:23:01
Комментарии

Как это будет работать? get_template_part выводит содержимое, а не возвращает его.

TheDeadMedic TheDeadMedic
27 июн. 2014 г. 10:47:57

Добавьте эту функцию в файл functions.php вашей темы. Затем вызовите эту функцию на главной странице. Я не тестировал это на своей стороне, пожалуйста, проверьте, работает ли это у вас.

TBI Infotech TBI Infotech
2 июл. 2014 г. 10:16:28