选择在自定义分类中没有关系的帖子

时间:2016-01-11 作者:Paflow

如前所述,我可以通过自定义分类法选择帖子in the codex. 但我不确定,如果我只想获得与自定义分类法没有任何关系的帖子,我必须如何设置tax\\u查询。有什么建议吗?

2 个回复
最合适的回答,由SO网友:Paflow 整理而成

对于那些通过谷歌登陆这里的人,我自己找到了一个答案:

$taxq = array(
    array(
        \'taxonomy\' => \'story_lng\',
        \'field\'    => \'id\',
        \'operator\' => \'NOT EXISTS\',
    )
);
这导致

AND (NOT EXISTS( SELECT     
    1    
FROM    
    wp_term_relationships    
        INNER JOIN    
    wp_term_taxonomy ON wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id    
WHERE    
    wp_term_taxonomy.taxonomy = \'story_lng\'    
        AND wp_term_relationships.object_id = wp_posts.ID))    
AND wp_posts.post_type = \'story\'    
AND (wp_posts.post_status = \'publish\'    
OR wp_posts.post_author = 1    
AND wp_posts.post_status = \'private\')
wich与Pieter Goosen建议的基本相同,但合并到一个查询中(代码行更少)。

SO网友:Pieter Goosen

唯一的方法是获取所有条款并排除属于这些条款的帖子

$taxonomy = \'my_tax\';
$terms = get_terms( 
    $taxonomy,
    [\'fields\' => \'ids\'] // Get only IDS
);

// Setup your query args 
$args = [
    \'tax_query\' => [
        [
            \'taxonomy\' => $taxonomy,
            \'terms\' => $terms,
            \'operator\' => \'NOT IN\' // Skip posts belonging to the passed terms
        ]
    ],
    // any other args
];
$q = new WP_Query( $args );
您需要确保您实际上有术语,而不是空数组或WP_Error 对象,因为这可能导致意外输出