首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有与术语x有不同分类的帖子的get_terms

具有与术语x有不同分类的帖子的get_terms
EN

WordPress Development用户
提问于 2019-01-30 12:47:43
回答 2查看 2K关注 0票数 3

情况就是这样;

我使用get_terms检索Tax 1中的所有术语,并发布与其相关的帖子。使用以下内容

代码语言:javascript
复制
$args = array(
            'hide_empty'    =>  0,
            'orderby'       =>  'name',
            'taxonomy'      =>  'tax_1'
        );

$terms  =   get_terms( $args );

很简单。然而,这将返回所有的术语,并且不考虑第二个分类法Tax 2,我想将它与term x进行比较。

最后,我希望得到所有的Tax 1术语,其中的帖子也有Tax 2术语x

我最有可能直接在帖子上进行查询,并创建一组包含上述两种内容的术语,但这似乎有点混乱,我希望有一种方法可以直接查询这一点。

谢谢

EN

回答 2

WordPress Development用户

发布于 2019-01-30 13:26:02

首先,您可以说“我正在使用get_terms从赋税1中检索与其相关的所有术语”,但是您的实际代码获得了该分类法中的所有术语,不管它们是否有posts。您需要将hide_empty设置为true

因此,抛开这一问题,坏消息是:您将无法在get_terms()中做到这一点。如果不查询帖子和比较术语,这种类型的信息是不存在的。因此,您想要避免的混乱解决方案不幸是必要的。

最终,我认为在这种情况下,只使用SQL可能会更好。此代码将使用$wpdb从分类法A中获得具有在分类法B中具有特定术语的给定post类型的帖子的术语:

代码语言:javascript
复制
$post_type  = 'post';
$taxonomy_a = 'post_tag';
$taxonomy_b = 'category';
$term_b_id  = 12;

$query = $wpdb->prepare(
    "SELECT DISTINCT
        terms.*
    FROM
        `wp_terms` terms
    INNER JOIN
        `wp_term_taxonomy` tt1 ON
            tt1.term_id = terms.term_id
    INNER JOIN
        `wp_term_relationships` tr1 ON
            tr1.term_taxonomy_id = tt1.term_taxonomy_id
    INNER JOIN
        `wp_posts` p ON
            p.ID = tr1.object_id
    INNER JOIN 
        `wp_term_relationships` tr2 ON
            tr2.object_ID = p.ID
    INNER JOIN 
        `wp_term_taxonomy` tt2 ON
            tt2.term_taxonomy_id = tr2.term_taxonomy_id
    WHERE
        p.post_type = %s AND
        p.post_status = 'publish' AND
        tt1.taxonomy = %s AND
        tt2.taxonomy = %s AND
        tt2.term_id = %d",
    [
        $post_type,
        $taxonomy_a,
        $taxonomy_b,
        $term_b_id,
    ]
);

$results = $wpdb->get_results( $query );

if ( $results ) {
    $terms = array_map( 'get_term', $results );
}

因此,该代码将获取所有具有分配给ID 12的类别的帖子的标记。

get_term()的最后一点确保最终数组包含与运行get_terms()所获得的相同的WP_Term对象。

票数 5
EN

WordPress Development用户

发布于 2019-01-30 12:58:23

您可以使用tax_query参数,例如:

代码语言:javascript
复制
'tax_query' => array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'tax1',
        'field'    => 'slug',
        'terms'    => $terms,
    ),
    array(
        'taxonomy' => 'tax2',
        'field'    => 'slug',
        'terms'    => $terms,
    )
)

得到所有有两个条件的职位。然后可以使用get_terms并将object_ids作为参数传递。有关更多细节,请参见WP_术语_查询文档

票数 3
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/327139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档