来自多个父母的孩子术语?

时间:2016-03-24 作者:Laura Sage

我正在使用同位素过滤自定义的帖子类型。但我只想要两个特定父母的孩子分类法。我可以很好地为单亲工作,但我不知道如何修改数组以允许双亲。

$terms = get_terms(\'speight_plans\', array(\'parent\' => 16)); // you can use any taxonomy, instead of just \'category\'
    $count = count($terms); //How many are they?
        if ( $count > 0 ){  //If there are more than 0 terms
            foreach ( $terms as $term ) {  //for each term:
                echo \'<button class="button" data-filter=".\'.$term->slug.\'">\' . $term->name . \'</button>\';
                //create a list item with the current term slug for sorting, and name for label
            }
        }
我试过了

array(\'parent\' => 16, 15));
但这仍然只显示了父母16岁的孩子。

如果您能提供任何帮助,我们将不胜感激。

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

我们可以通过terms_clauses filter 在执行SQL查询之前。我们将要做的是引入一个名为wpse_parents 它将接受一个父项ID数组以从中获取子项。注意,此新参数的工作方式与内置参数完全相同,parent, 因为它将只返回父级的直接子级。

过滤器对代码进行了注释,以便于理解和基本描述特定代码的作用。注意,所有代码至少需要PHP 5.4

add_filter( \'terms_clauses\', function ( $pieces, $taxonomies, $args )
{
    // Bail if we are not currently handling our specified taxonomy
    if ( !in_array( \'speight_plans\', $taxonomies ) )
        return $pieces;

    // Check if our custom argument, \'wpse_parents\' is set, if not, bail
    if (    !isset ( $args[\'wpse_parents\'] )
         || !is_array( $args[\'wpse_parents\'] )
    ) 
        return $pieces;

    // If  \'wpse_parents\' is set, make sure that \'parent\' and \'child_of\' is not set
    if (    $args[\'parent\']
         || $args[\'child_of\']
    )
        return $pieces;

    // Validate the array as an array of integers
    $parents = array_map( \'intval\', $args[\'wpse_parents\'] );

    // Loop through $parents and set the WHERE clause accordingly
    $where = [];
    foreach ( $parents as $parent ) {
        // Make sure $parent is not 0, if so, skip and continue
        if ( 0 === $parent )
            continue;

        $where[] = " tt.parent = \'$parent\'";
    }

    if ( !$where )
        return $pieces;

    $where_string = implode( \' OR \', $where );
    $pieces[\'where\'] .= " AND ( $where_string ) ";

    return $pieces;
}, 10, 3 );
请注意,过滤器的构建方式不允许parentchild_of 正在设置的参数。如果设置了这些参数中的任何一个,则过滤器会提前卸载,并且不会应用

基本用法

如果需要查询术语15和16中的子术语,可以运行以下查询来实现您的目标

$args = [
    \'wpse_parents\' => [15, 16]
];
$terms = get_terms( \'speight_plans\', $args );

SO网友:Tung Du

我可以考虑get_term_children() 作用您可以使用该函数两次来检索两个父项的子项id的2个数组。然后可以将它们合并到一个数组中,并将该数组传递给get_terms

get_terms(\'speight_plans\', array(\'include\' => $child_terms_arr));

相关推荐

GET_THE_TERMS与wp_GET_POST_TERMS中的奇怪结果

我正在尝试制作一个面包屑函数,但有一个小问题。。。使用时:$categories = get_the_terms( $post->ID, \'product_cat\' ); 我得到了一个循环中使用的类别数组,等等。唯一的问题是它是按字母顺序排列的。(我希望它按层次顺序排列。)经过一番挖掘,我发现了一种替代方法,即使用wp\\u get\\u post\\u terms(),但我肯定遗漏了一些东西,因为当我使用此方法时:$categories = wp_get_post_terms( $p