Запросы двух taxonomies

У меня есть два taxonomies: "тип руководства" и "инструменты".

Они выглядят примерно так:

Тип руководства

- Article
- Video
- Cheat sheet

Инструмент

— Изучение системы управления

  • Инструмент теста

    - 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)
    
  • Инструмент Notifications

  • Инструмент классов

Снимок экрана обрисовывает в общих чертах проблему отлично: Я должен ограничить тот налоговый запрос для включения только объектов, которые отмечены с "Инструментом Теста".

Экран: http://cl.ly/0t3J143q0A1X2w2y2X2n

Я пытаюсь сделать это с tax_query, с И отношение:

$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 );

Но я просто не могу выяснить, как ограничить только элементами списка, которые отмечены с "Инструментом Теста". Отметьте, "что я помещаю здесь" часть.

Help ценится.

ОБНОВЛЕНИЕ:

Мне просто пришло в голову, что я не должен запрашивать и taxonomies, вместо этого выйти из tax_query и использовать 'get_the_category ()' как часть $args:

// The Query
    $args = array(
        'tax_query' => array(
            array(
                'taxonomy' => 'guide-type',
                'field' => 'slug',
                'terms' => 'self-paced '
            )
        ), 
        'category_name' => get_the_category()

Что-то как этот? Любые идеи, как я мог ограничить это 'category_name', чтобы быть текущим, я смотрю на (Инструмент Теста).

Terry

1
18.05.2012, 18:04
3 ответа

Эта функция помощника возвратит идентификатор термина, который Вы в настоящее время просматриваете (от любой таксономии - можно ограничить только определенной таксономией, или встроенным тегом и категорией taxonomies).

Это возвратит 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 );

Примечание: Я не протестировал это

1
19.02.2020, 23:06
  • 1
    Спасибо за то, что взглянули на это, Stephen. $term_id, кажется, не становится возвращенным. Я ничего не получаю, когда я повторяю его в своем шаблонном файле. ($taxonomy echos прекрасный, но это, вероятно, ожидается.) –  saltcod 18.05.2012, 18:55

Это должно получить все данные сообщения для таксономии "Инструмент" с термином "Инструмент Теста".

$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;
}
0
19.02.2020, 23:06
  • 1
    Спасибо Michael. Как был бы я делать этот дженерик — т.е.: не кодируют 'инструмент теста' в get_content_taxonomy (). Я хочу использовать этот тот же WP_Query для всех страниц. Идеально, get_content_taxonomy (the_current_tool_i'm_in) ограничил бы его только инструментом, на который я смотрю теперь. –  saltcod 18.05.2012, 17:59

Альтернативный способ сделать это должно использовать 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 в мой tax_query:

$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).

0
19.02.2020, 23:06

Теги

Похожие вопросы