web-dev-qa-db-fra.com

Interroger deux taxonomies

J'ai deux taxonomies: "type de guide" et "outils".

Ils ressemblent à ceci:

Type de guide

- Article
- Video
- Cheat sheet

Outil

- Apprentissage système de gestion

  • Quiz 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)
    
  • Outil de notifications

  • Outil de notation

La capture d'écran décrit parfaitement le problème: je dois limiter cette requête fiscale pour n'inclure que les éléments marqués avec "Outil de questionnaire".

Écran: http://cl.ly/0t3J143q0A1X2w2y2X2n

J'essaie de le faire avec un tax_query, avec une relation 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 );

Mais je n'arrive pas à comprendre comment limiter à la liste les éléments étiquetés avec "Outil de questionnaire". Notez la partie "qu'est-ce que je mets ici".

Aide appréciée.

METTRE À JOUR:

Je viens de me rendre compte que je n'ai pas à interroger les deux taxonomies, mais à quitter le tax_query et à utiliser un 'get_the_category ()' dans le cadre du $ args:

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

Quelque chose comme ca? Toutes les idées sur la façon dont je pourrais limiter ce 'nom de catégorie' à l'actuel (outil de questionnaire).

Terry

1
saltcod

Cette fonction d'assistance renverra l'ID du terme que vous consultez actuellement (de toute taxonomie - vous pouvez vous limiter à une taxonomie spécifique, ou à la dans les taxonomies de balises et de catégories).

Il retournera false si vous ne vous trouvez pas sur une page d'archive de terme de taxonomie.

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;
}

Ensuite, vous pouvez faire quelque chose comme ce qui suit:

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

Remarque: je n'ai pas testé cela

1
Stephen Harris

Cela devrait obtenir toutes les données de publication pour la taxonomie "Outil" avec le terme "Outil de questionnaire".

$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
Michael Ecklund

Une autre façon de faire consiste à utiliser get_the_terms() pour déterminer la page du terme fiscal sur laquelle vous vous trouvez, puis à le transférer au 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);
    }

Maintenant je peux passer $current_term dans mon 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 );

Je retourne le dernier élément du tableau, car c'est la page des taxes sur laquelle je suis. Vous pouvez renvoyer la valeur à partir de n’importe quelle position dans le tableau souhaité. Il m'est arrivé de vouloir le dernier et j'ai donc utilisé end(array).

0
saltcod