Querying two taxonomies

时间:2012-05-18 作者:saltcod

我有两种分类法:“指南类型”和“工具”。

它们看起来像这样:

Type of guide

- Article
- Video
- Cheat sheet

Tool

— 学习管理系统

测验工具

- Hide a grades column (article)
- Creating a Gradebook (article)
- Long Answer Question Steps (article)
- Matching Questions (article)
- True or False (article)

- Using the Quiz Tool (video)

- Using the Quiz Tool (cheat sheet)
通知工具

该屏幕截图完美地概括了这个问题:我需要将税务查询限制为只包括标有“测验工具”的项目。

屏幕:http://cl.ly/0t3J143q0A1X2w2y2X2n

我正在尝试使用tax\\u查询,使用AND关系:

$args = array(
        \'tax_query\' => array(
            \'relation\' => \'AND\', 
            array(
                \'taxonomy\' => \'guide-type\',
                \'field\' => \'slug\',
                \'terms\' => \'video\'
            ),
            array(
                \'taxonomy\' => \'tool\',
                \'field\' => \'slug\',
                \'terms\' => what do I put here to get the current tool (Quiz tool)? 
                )
        )
    );
    $query = new WP_Query( $args );
但我就是想不出如何限制只列出标有“测验工具”的项目。注意“我在这里放什么”部分。

感谢您的帮助。

更新时间:

我突然想到,我不必同时查询这两种分类法,而是退出tax\\u查询并使用“get\\u the\\u category()”作为$参数的一部分:

// The Query
    $args = array(
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'guide-type\',
                \'field\' => \'slug\',
                \'terms\' => \'self-paced \'
            )
        ), 
        \'category_name\' => get_the_category()
像这样的?有什么想法可以限制“category\\u name”为我当前正在查看的名称(测验工具)。

特里

3 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

此helper函数将返回当前查看的术语的ID(从任何分类法-您可以仅限于特定分类法或内置标记和类别分类法)。

如果您不在分类术语存档页上,则返回false。

function wpse52578_get_current_term_id(){
    if( !is_tax() && !is_tag() && !is_category() )
       return false;

    //If we got this far we are on a taxonomy-term page
    // (or a tag-term or category-term page)
    $taxonomy = get_query_var( \'taxonomy\' );
    $queried_object = get_queried_object();
    $term_id =  (int) $queried_object->term_id;

    return $term_id;
}
然后可以执行以下操作:

$tool_term_id = wpse52578_get_current_term_id();
$tax_query = array( 
             \'relation\' => \'AND\', 
             array(
                \'taxonomy\' => \'guide-type\',
                \'field\' => \'slug\',
                \'terms\' => \'video\'
            ));

if( $tool_term_id ){
     $tax_query[] =  array(
                \'taxonomy\' => \'tool\',
                \'field\' => \'id\',
                \'terms\' => $tool_term_id
                )
 }

$args = array(\'tax_query\' => $tax_query);
$query = new WP_Query( $args );
注意:我没有测试过这个

SO网友:Michael Ecklund

这应该可以获得分类法“工具”和术语“测验工具”的所有post数据。

$posts = get_content_taxonomy(\'tool\', \'quiz-tool\');

function get_content_taxonomy($tax, $section){
    $wp_query = new WP_Query();
    $wp_query->query(array(\'posts_per_page\' => -1, \'orderby\' => \'title\', \'order\' => \'ASC\', \'tax_query\' => array(array(\'taxonomy\' => $tax, \'field\' => \'slug\', \'terms\' => $section))));
    $posts = $wp_query->posts;
    if(!empty($posts)){
        $return = $posts;
    }
    return $return;
}

SO网友:saltcod

另一种方法是使用get_the_terms() 要了解您所在的纳税条款页面,请将其传递给tax_query.

// Get an array of current terms, use the last one returned     

 $terms = get_the_terms( $post->ID, \'tool\' );

    if ( $terms && ! is_wp_error( $terms ) ) { 
        $current_tax_terms = array();

        foreach ( $terms as $term ) {
            $current_tax_terms[] = $term->name;
        }

        //Use end to give me just the last term             
        $current_term = end($current_tax_terms);
    }
现在我可以通过了$current_term 进入my tax\\u查询:

$args = array(
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'guide-type\',
                \'field\' => \'slug\',
                \'terms\' => \'self-paced\'
            ),
            array(
                \'taxonomy\' => \'tool\',
                \'field\' => \'slug\',
                \'terms\' => $current_term
            )
        ), 
        \'author_name\' => \'saltcod\'

    );
    $query = new WP_Query( $args );


    $the_query = new WP_Query( $args );
我返回数组中的最后一项,因为这是我所在的税务页面。可以从所需数组中的任何位置返回值。我碰巧想要最后一个,所以用过了end(array).

结束

相关推荐