如果只有一个特定类别,wordpress会从循环中排除帖子
我有一个类别是“社区帖子”,我不希望它出现在我的主页循环中,所以我把它添加到我的查询中如果只有一个特定类别,wordpress会从循环中排除帖子,wordpress,Wordpress,我有一个类别是“社区帖子”,我不希望它出现在我的主页循环中,所以我把它添加到我的查询中 <?php query_posts(array('showposts' => 4,'category__not_in' => $id_communityposts,));?> 这对我来说很好,但我希望一些“社区帖子”能在首页循环中出现。(例外) 因此,我只想排除一个类别为“社区帖子”的帖子,如果它有这个类别,并且更多的帖子正常显示。首先,它不应该被使用,因为它改变了主查询。改为使
<?php query_posts(array('showposts' => 4,'category__not_in' => $id_communityposts,));?>
这对我来说很好,但我希望一些“社区帖子”能在首页循环中出现。(例外)
因此,我只想排除一个类别为“社区帖子”的帖子,如果它有这个类别,并且更多的帖子正常显示。首先,它不应该被使用,因为它改变了主查询。改为使用get_posts
——它更安全,并且执行相同的任务
为了回答您的问题,让我们首先想象一下查询在SQL中的外观(假设您的$id\u communityposts
等于2):
因此,我们查询post、post元和分类表,并设置两个可能的条件:
- 类别ID不是2、或
- 文章的
元键设置为featured
(根据存储“featured”信息的方式将其更改为任意键/值)1
get_posts
并不是很好的玩法——使用WPDB
查询数据库将给您带来更大的灵活性
$posts = $wpdb->get_results(
"SELECT DISTINCT $wpdb->posts.*
FROM $wpdb->posts, $wpdb->postmeta
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE
$wpdb->posts.ID = $wpdb->postmeta.post_id AND
(
($wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id NOT IN(2))
OR
($wpdb->postmeta.meta_key = 'featured' AND $wpdb->postmeta.meta_value = 1)
)
ORDER BY $wpdb->posts.post_date DESC
LIMIT 4"
);
如果您遇到任何问题,请告诉我,因为这是一个未经测试的查询。如果我正确理解了该问题,最简单的解决方案(不涉及复杂的
SQL
)将是:
// NOT TESTED !
if ( count(get_the_category()) > 1 ) { // this means there are more than single category
// show the desired posts
} else {
// dont show
}
读入法典
按照同样的逻辑,您也可以使用我不知道它如何响应OP的需求,因为如果帖子不在特定的类别中,或者如果帖子在这个类别中并且是特色的,他希望显示帖子。@vard-这是一个检查帖子是否只分配了一个类别的简单解决方案。我没有做全部的家庭作业,也没有为OP写全部的代码,只是指出了简单的方向。正确地应用简单的类别条件,它将工作得很好。你自己试试看。我已经在一个现场网站上使用了3年了。你不明白OP在问什么。在他的例子中,他的帖子可以是一个或多个类别,这些帖子可以是一个不应该出现在主页上的类别,但如果它们有特色的话,它们应该出现在主页上(一些meta可能会提到这一点)。你的回答根本不能解决这种情况。@vard,我可能错了,我非常钦佩你的
SQL
技能-但我认为你不理解我的回答,或者不知道如何应用它,op问我只想排除一类为“社区帖子”的帖子如果有此类别和更多类别,则其显示正常。
(另请参见标题)。。在wordpress
上下文(称为sticky
BTW)中未提及特色帖子
,即使是,对的简单检查也是sticky($post\u ID)代码>就可以了。如果它是一个自定义元,那么检查get\u post\u meta()
就可以了。这是非常琐碎的
// NOT TESTED !
if ( count(get_the_category()) > 1 ) { // this means there are more than single category
// show the desired posts
} else {
// dont show
}