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

  • Привет.

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

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

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

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

Просмотр 5 ответов — с 16 по 20 (всего 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();
    	if ( !get_post_format()){
    		get_template_part( 'content-book', 'none' );
    		}
            else {echo 'Это не стандартный пост, а : '. get_post_format();}
    	endwhile;
    ?>
    	<nav class="navigation pagination postnavigation" role="navigation"><div class="postnav nav-links"><?php echo paginate_links(); ?></div></nav>
    	<?php wp_reset_query(); ?>

    Это полностью Ваш код, с тем лишь исключением, что вместо нестандартного поста будет выводить уведомление…

    Ы. Вы запрашиваете только 10 постов. Может проблема в том, что среди первых 10 постов нет стандартного?

    Спасибо, да, вы правы, все работает.:) Забыл сменить тип записей на свой.

    Небольшая заминка помогла мне найти и второй способ решения проблемы. Он описан здесь (англ.)

    Там показан способ, как исключить из массива при выборе посты определенного типа записей с помощью фильтрации через ‘operator’ => ‘NOT IN’

    <?php
    $args = array(
      'tax_query' => array(
        array(
          'taxonomy' => 'post_format',
          'field' => 'slug',
          'terms' => 'post-format-ФОРМАТЗАПИСИ',
          'operator' => 'NOT IN'
        )
      )
    );
    query_posts( $args );
    ?>

    ИТОГО — Как исключить (не показывать) посты определенного формата (post_format)

    Два примера кода

    1. Решение один

    <?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(); ?>

    2. Решение два

    <?php
    $page = (get_query_var('paged')) ? get_query_var('paged') : 1;
     $args = array(
       'post_type' => 'book',
       'posts_per_page' => 10,
       'paged' => $page,
    	 'tax_query' => array(
    		array(
    		  'taxonomy' => 'post_format',
    		  'field' => 'slug',
    		  'terms' => 'post-format-aside',
    		  'operator' => 'NOT IN'
    		)
    	  )
    
       );
    query_posts($args);
    while ( have_posts() ) : the_post(); ?>
    
    	<?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;?>
    
    <nav class="navigation pagination postnavigation" role="navigation"><div class="postnav nav-links"><?php echo paginate_links(); ?></div></nav>
    <?php //wp_reset_query(); ?>

    Огромное спасибо visajack за помощь в решении проблемы!:)

    Есть такой анекдот:

    Приходит мужик на базар, а там торгаш орёт:
    — Новое универсальное средство от блох. Гарантия 100%
    — Сколько стоит?
    — 100 рублей.
    — А как им пользоваться?
    — Ловите блоху. Открываете ей рот. Зубочисткой набираете чутка порошка от блох и вкладываете блохе в рот. Следите за тем, чтобы блоха проглотила порошок — она не должна открывать рот минимум 3 минуты. Отпускаете блоху и через несколько минут она сдохнет…
    — Так если я поймаю блоху, то смогу просто раздавить её.
    — Можно и так…

    🙂

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