如果只有一个特定类别,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
    元键设置为
    1
    (根据存储“featured”信息的方式将其更改为任意键/值)
对于这种特定的情况,
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 
    }