2015-03-15 3 views
1

Может ли кто-нибудь объяснить, почему этот запрос не работает? Я хочу исключить сообщения, помеченные главной страницей. Он по-прежнему показывает пост с названием категории «домашняя страница» ...Категория исключения Wordpress (WP_Query не работает)

<?php 
    $query = new WP_Query('category_name=-homepage'); 
?> 

<?php if ($query->have_posts()) : ?> 
    <?php while (have_posts()) : the_post(); ?> 
     <?php 
      get_template_part('content', 'news'); 
     ?> 
    <?php endwhile; ?> 
    <?php the_posts_navigation(); ?> 
    <?php else : ?> 
     <?php get_template_part('content', 'none'); ?> 
<?php endif; ?> 
+0

также попытался $ запрос = новый WP_Query ('кошачий = -11'); но он не работает. – MathCiet

+0

Несвязанный ... но чувак, избавиться от всех этих '' тегов ... – rnevius

+2

Вам также нужно изменить 'while (has_posts()): the_post();' to 'while ($ query-> has_posts ()): $ query-> the_post(); '. –

ответ

6

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

Вы можете попробовать:

$query = new WP_Query(array('category__not_in' => array(11))); 
+0

Уверены ли вы, что нет каких-либо параметров темы, которые могли бы отменять исключение категорий? –

+0

Спасибо, Натан и Гжегож! – MathCiet

2

Есть 2 проблемы в вашем коде.

Вы используете slug вместо ID, чтобы исключить категорию, и вы не используете цикл правильно с вашим пользовательским запросом.

<?php 
$query = new WP_Query(array(
    'cat' => -5, // replace with correct category ID. 
)); 

if ($query->have_posts()) : 

    // make sure we use have_posts and the_post method of our custom query. 
    while ($query->have_posts()) : $query->the_post(); 
     get_template_part('content', 'news'); 
    endwhile; 

else: 
    get_template_part('content', 'none'); 
endif; 

Перемещение за рамки вашего первоначального вопроса, вы не можете использовать the_posts_navigation() внутри пользовательского цикла. Он действует на глобальном уровне $wp_query. Я подозреваю, что вы можете посмотреть на фильтр pre_get_posts.

Дальнейшее чтение:

http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Смежные вопросы