Проверка сообщений, соответствующих определенной категории и не относящихся к категории исключения - PullRequest
0 голосов
/ 01 декабря 2009

У меня есть функция ниже, целью которой является создание списка сообщений, в котором категория, назначаемая каждому сообщению, является "топ-меню" Однако сначала я хочу исключить все сообщения, в которых категория «скрыта» ...

Как мне отредактировать этот код для этого?

global $post;
$cat = get_cat_ID('top-menu');
if ($cat > 1) 
  $myposts = get_posts('numberposts=5&category='.$cat);
else
  $myposts = get_posts('numberposts=10');
foreach ($myposts as $post) :
?> 
<li>
  <a href="<?php the_permalink(); ?>">
    <?php the_title(); ?>
  </a>
</li>
<?php endforeach; ?>

Ответы [ 2 ]

2 голосов
/ 02 декабря 2009

Это должно делать то, что вы хотите. Не уверен, почему у вас было заявление if, поэтому не стесняйтесь включать его снова, если вам это нужно. Вы всегда можете просто использовать category и дать ему идентификатор вместо category_name, как я использую здесь в качестве ярлыка.

$exclude_cat = get_cat_ID('hidden');
$include_cat = get_cat_ID('top-menu');

$myposts = get_posts( array(
    'numberposts'      => 5,
    'category__in'     => array( $include_cat ),
    'category__not_in' => array( $exclude_cat )
));

РЕДАКТИРОВАТЬ: category_name нельзя комбинировать с category__not_in, поэтому я немного изменил код, чтобы оба фильтра были запущены.

Я проверил это, и оно работает в WordPress 2.8, просто обязательно укажите реальное имя категории в вызовах get_cat_ID, а не slug случайно.

1 голос
/ 02 декабря 2009

Отмечая, что пересмотренное предложение dcneiner работает. Этот запрос генерирует этот SQL

SELECT SQL_CALC_FOUND_ROWS  wp_posts.* FROM wp_posts  
INNER JOIN wp_term_relationships 
  ON (wp_posts.ID = wp_term_relationships.object_id) 
INNER JOIN wp_term_taxonomy 
  ON (wp_term_relationships.term_taxonomy_id = 
    wp_term_taxonomy.term_taxonomy_id)  
WHERE 1=1  
  AND wp_term_taxonomy.taxonomy = 'category'  
  AND wp_term_taxonomy.term_id IN ('3')  
  AND wp_posts.ID NOT IN 
  ( SELECT tr.object_id FROM wp_term_relationships AS tr 
    INNER JOIN wp_term_taxonomy AS tt 
      ON tr.term_taxonomy_id = tt.term_taxonomy_id 
    WHERE tt.taxonomy = 'category' 
    AND tt.term_id IN ('1') ) 
    AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'publish' 
  OR wp_posts.post_status = 'private') 
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_date DESC LIMIT 0, 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...