我在下面有一个功能,其目的是创建一个帖子列表,其中分配给每个帖子的类别是“顶级菜单”。但是,我首先要排除任何类别为“隐藏”的帖子...
如何编辑此代码才能执行此操作?
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; ?>
答案 0 :(得分:2)
这应该做你想要的。不确定为什么你有if
声明,所以如果你需要,请随时再次合并。您可以随时使用category
并为其指定ID而不是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 :(得分:1)
注意到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