Поддержка Проблемы и решения Вывод постов исключая посты определенного формата

  • Привет.

    Подскажите, пожалуйста.

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

    Выводить посты определенного типа, например заметки, можно добавив строку ‘post_format’ => ‘post-format-aside’ в аргументы, но ведь стандартный пост не имеет названия!

    Как быть в данной ситуации?
    Можно ли исключить посты по названию?

Просмотр 15 ответов — с 1 по 15 (всего 20)
  • Код вывода записей в архиве

    <?php
    					$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
    					 $args = array(
    					   'post_type' => 'book',
    					   'posts_per_page' => 10,
    					   'paged' => $page,
    
    					   );
    					query_posts($args);
    					while ( have_posts() ) : the_post(); ?>
    						<?php $format = get_post_format();?>
    						<?php if ( ! get_post_format()) : ?>
    						<?php get_template_part( 'content-book', 'none' ); ?>
    						<?php else : ?>
    						<?php get_template_part( 'content-book', get_post_format() ); ?>
    						<?php endif ?>
    					<?php endwhile;?>
    					<?php echo $format; ?>
    					<nav class="navigation pagination postnavigation" role="navigation"><div class="postnav nav-links"><?php echo paginate_links(); ?></div></nav>
    					<?php //wp_reset_query(); ?>

    А разве стандартный не text?
    ‘post_format’ => ‘post-format-text’

    К сожалению, нет. Но я на всякий случай проверил этот вариант.

    Попробуйте отобразить формат. После
    <?php $format = get_post_format();?>
    добавьте
    <?php echo $format; ?>
    Возможно в массиве аргументов нужно указывать не post-format-text а просто text

    Уже проверял этот вариант (<?php echo $format; ?> есть в коде выше))) Выводится только aside, к сожалению.

    есть в коде выше)))

    Внутрь цикла echo поместите
    У вас выводится формат ПОСЛЕДНЕГО поста

    Проверил не выводится. На всякий случай убрал все записи, кроме стандарта — тоже ничего не выводится.

    Кодекс говорит, что пост может не иметь формата, но не может иметь формат «стандарт» или «текст».

    + вот еще цитата (правда уже не из кодекса)

    The terms have the slug post-format-{$format} where $format can be one of:

    aside, chat, gallery, link, image, quote, status, video, audio
    where standard is not included.

    Я тут подумал, если post_format — это таксономия, то нам просто надо убрать категории aside и остальные из выборки по этой категории. Только обычно это делается через id категорий, которых у нас нет и надо сделать как то через slug.

    Ну так тогда условием if ( ! get_post_format()) и ограничивайте вывод записей

    <?php
    	$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
    	$args = array(
    		'post_type' => 'book',
    		'posts_per_page' => 10,
    		'paged' => $page,
    		);
    	query_posts($args);
    	while ( have_posts() ) : the_post();
    	$format = get_post_format();
    	if ( !get_post_format()){
    		get_template_part( 'content-book', 'none' );
    		}
    	endwhile;
    ?>
    	<nav class="navigation pagination postnavigation" role="navigation"><div class="postnav nav-links"><?php echo paginate_links(); ?></div></nav>
    	<?php wp_reset_query(); ?>

    if ( ! get_post_format()) уже тоже есть в коде, но она подбирает шаблон для вывода записей (если есть content-book-aside.php, например), а не фильтрует их. Отфильтровать у меня не получилось

    Я тут подумал, если post_format — это таксономия, то нам просто надо убрать категории aside и остальные из выборки по этой категории. Только обычно это делается через id категорий, которых у нас нет и надо сделать как то через slug.

    Что-то Вы глубоко копаете 🙂
    Я же условие правильно понял?

    Необходимо выводить только записи стандартного формата и не выводить видео, заметки и прочее.

    Код выше будет именно это и делать

    if ( ! get_post_format()) уже тоже есть в коде, но она подбирает шаблон для вывода записей (если есть content-book-aside.php, например), а не фильтрует их.

    Я код читать умею 🙂
    В данный момент у вас код:
    Если формат не указан отображать без шаблона
    Иначе — подобрать шаблон и отобразить

    Ваша задача убрать из кода «иначе».
    🙂
    КОД ВЫШЕ БУДЕТ РАБОТАТЬ 🙂
    ПРичем переменную $format можно/нужно убрать

    while ( have_posts() ) : the_post();
    if ( !get_post_format()){
    	get_template_part( 'content-book', 'none' );
    	}
    endwhile;

    Большое спасибо за разъяснения кода, но приведенный пример, к сожалению не работает. Пробовал его ставить и полностью, и заменяя часть кода начиная с if — все равно ни один пост не выводится.

    Upd: переменную убрал

    Код, приведенный Вами в первом посте работает? Отображает все посты?

    Да, конечно. Этот код используется на разных страницах архивов и везде работает.

Просмотр 15 ответов — с 1 по 15 (всего 20)
  • Тема «Вывод постов исключая посты определенного формата» закрыта для новых ответов.