2016-12-26 1 views
1

Я использую этот код для выбора соответствующих сообщений из первой категории сообщения, но мне нужно исключить/пропустить одну из многих категорий, если один из них показывает сначала.Исключить записи определенной категории от показанных в соответствующих сообщениях

<?php 
    // the query 
    global $post; 
    // We should get the first category of the post 
    $categories = get_the_category($post->ID); 
    $first_cat = $categories[0]->cat_ID; 
    $the_query = new WP_Query( $args = array(
      // It should be in the first category of our post: 
      'category__in' => array($first_cat), 
      // Our post should NOT be in the list: 
      'post__not_in' => array($post->ID), 
      // ...And it should fetch 9 posts 
      'posts_per_page' => 9, 
      'orderby' => 'desc' 
     )); ?> 
    <?php if ($the_query->have_posts()) : ?> 
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?> 

Как это сделать?

+0

'category__not_in' не разрезает его? – yivi

+0

Или вы хотите пропустить идентификатор cat 81, если это «первая» категория, к которой принадлежит сообщение? – yivi

+0

@yivi да, это именно то. category__not_in, не работает – Alex

ответ

2

Если вы хотите посмотреть на «связанные» сообщения, если категория в вопросе не 81, вы могли бы сделать что-то вроде:

$categories_to_exclude [ 81, 11, 21 ]; 
$first_cat = false; 
$categories = get_the_category($post->ID); 
while (! empty($categories) && false === $first_cat) { 
    if (in_array($categories[0]->cat_ID, $categories_to_exclude)) { 
     array_shift($categories); 
    } 
    else { 
     $first_cat = $categories[0]->cat_ID; 
    } 
} 

Вы получаете категории с get_the_category. Затем в цикле while вы пропускаете первую категорию, если она равна 81, и смотрите снова. Если это не 81 (и у вас все еще есть категории), вы присваиваете его $first_cat и продолжаете.

И тогда вы выполняете только «родственный» запрос, если вы $first_cat не false.

Недоумение от ваших комментариев, но если вы хотите исключить сообщения из одной или нескольких категорий из вашего поиска, вы должны использовать category__not_in, который принимает массив. Таким образом, вы можете сделать что-то вроде:

'category__not_in' => [44, 71, 85], 
+0

Это не работает. Позвольте мне попробовать explayin лучше: каждый пост может иметь одну или несколько категорий, и если первая категория - категория 81, мне нужно исключить все записи внутри этой категории и показать только сообщения в следующей один. – Alex

+0

Ваши требования немного странные. Итак: если первый кот равен! = 81, вы ищете сообщения, принадлежащие этому коту (даже если они принадлежат 81 также). Если первый котик == 81, покажите сообщения, принадлежащие «следующему» cat -let, скажем, 72 - (до сих пор это то, что охватывает мой код), но также ИСКЛЮЧАЕТ любые сообщения, принадлежащие 81. Так что 'category__in' 72 и' category__not_in' 81. Нравится? – yivi

+0

Если петля находится на должности с категориями 81,71,27 =>, она должна пропустить категорию 81 и искать связанные должности в категории 71 – Alex