Задать вопрос
@turin182

Как вывести ОДИН пост из категории в WordPress?

Все доброго времени суток, у меня вот такая вот проблема.
Не могу понять, как написать php код, чтобы выводил мне только ОДИН ПОСТ по id категории. И реализовать кнопку "Следующий пост" и "Предыдущий пост".
Может кто подскажет, где я туплю. Спасибо!
<?php $getcat = get_the_category();?>
<?php $cat = $getcat[0]->cat_ID; ?>
<?php $the_query = new WP_Query( array( 'cat' => $cat, 'showposts=1') );
$post_id = get_the_ID(); ?>
<?php if ( $the_query->have_posts($post_id) ) : ?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post($post_id); ?>
 
        <?php the_title(); ?>
        <?php the_content(); ?>
        <?php previous_post_link('%link', 'Предыдущая', true); ?>   
<?php next_post_link('%link', 'Следующая', true); ?>    
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>
<?php else : ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>
  • Вопрос задан
  • 1217 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Palych_tw
@Palych_tw
Типа веб-разработчик
Может кто подскажет, где я туплю.

have_posts($post_id) - вот это вообще откуда? и вот это the_post($post_id)
Эти функции не принимают никаких аргументов.
в get_the_category(); нужно передавать ID поста. По умолчанию используется ID текущего поста в цикле.
next_post_link и previous_post_link Используются только на страницах единичной записи. Любые функции пагинации и навигации работают только с основным запросом (global $wp_query).
showposts устарело, используйте posts_per_page
Объясните контекст задачи. На какой странице вы хотите получить пост и как вы его хотите выбрать.

А к чему такие трудности вообще? Если вы хотите вывести пост, используйте шаблон single.php или шаблон для нужного post-type. Там напишите ОБЫЧНЫЙ базовый цикл БЕЗ всяких лишних аргументов, WP сам выведет нужный пост. А для навигации вместо next_post_link и previous_post_link используйте, соответственно get_next_post_link() и get_previous_post_link() . В них можно задать логический параметр $in_same_term для вывода ссылки на пост из ТОЙ ЖЕ рубрики.
Ответ написан
Комментировать
@turin182 Автор вопроса
Да, действительно have_posts($post_id) не работает, исправил. Получился вот такой вариант
<?php $getcat = get_the_category();?>
<?php $cat = $getcat[0]->cat_ID; ?>
<?php $post_id = get_the_ID(); ?>
<?php $the_query = new WP_Query( array( 'cat' => $cat, 'posts_per_page' => 1, 'p' => $post_id) );?>
<?php if ( $the_query->have_posts() ) : ?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
 
        <?php the_title(); ?>
        <?php the_content(); ?>
        <?php previous_post_link('%link', 'Предыдущая', true); ?>   
<?php next_post_link('%link', 'Следующая', true); ?>    
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>
<?php else : ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>


Вроде работает как надо.
А что мне надо было, у меня есть посты которые, каждый из которых относится к одной из четырёх категорий. Когда открывается страница с полным текстом, у меня должна быть реализована навигация по постам из данной категории. Навигация простая, из кнопок Следующая и Предыдущая, и соответственно страница должна обновляться на полный текст другого поста.
Да. и убрал showposts
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы