web-dev-qa-db-fra.com

Remplir le paramètre de termes tax_query avec le terme suivant

Je dois renseigner le paramètre terms de mon tax_query avec le terme actuel de la publication.

J'ai essayé d'utiliser la fonction WP wp_get_post_terms dans une variable, puis de la référencer dans le paramètre terms pour saisir le nom du terme de publication en cours.

J'utilise la page de codex comme référence, mais je n'arrive pas à la faire peupler.

Est-ce que quelqu'un peut-il me montrer la bonne direction??

//Returns Array of Term Names for "topic"
    $term_list = wp_get_post_terms($post->ID, 'topic', array("fields" => "names"));
    echo $term_list;

    $args = array (
        'post_type'      => 'knowledge-base',
        'orderby'        => 'meta_value_num', 
        'meta_key'       => 'top_four_num',
        'tax_query' => array(
        array(
            'taxonomy' => 'topic',
            'field'    => 'slug',
            'terms'    => $term_list,                                       

            ),
        ),                  
    );

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();

            echo '<h2>' . the_title() . '</h2>';

        }
    } 

    // Restore original Post Data
    wp_reset_postdata();

Toute aide est très appréciée!

1
tmgale12

Vous avez quelques problèmes ici.

  • En tant que votre code, $post n'est pas défini. En fait, il est préférable d'utiliser get_the_ID() pour obtenir l'ID de publication au lieu de $post.

  • wp_get_post_terms() effectue un appel supplémentaire à la base de données. Par conséquent, si vous êtes vraiment déterminé par les performances, je préférerais utiliser get_the_terms().

  • Vous renvoyez des noms de terme, mais définissez ensuite le paramètre field dans votre tax_query sur slug. La valeur du champ doit correspondre à la valeur du terme passé. Juste une remarque, n'utilisez jamais le champ name dans un tax_query, il y a un problème d'assainissement de nom dans la classe WP_Tax_Query. Si vous utilisez wp_get_post_terms(), définissez le paramètre fields sur ids pour renvoyer un tableau d'identificateurs de termes.

EXEMPLES

wp_get_post_terms()

$term_list = wp_get_post_terms(
    get_the_ID(), 
    'topic', 
    array(
        'fields' => 'ids'
    )
);

if (    $term_list
     && !is_wp_error( $term_list )
) {
    $args = array (
        'post_type'      => 'knowledge-base',
        'orderby'        => 'meta_value_num', 
        'meta_key'       => 'top_four_num',
        'tax_query' => array(
            array(
                'taxonomy' => 'topic',
                'terms'    => $term_list,                                       
            ),
        ),                  
    );
    // Run your custom query here
}

get_the_terms()

$terms = get_the_terms(
    get_the_ID(), 
    'topic'
);

if (    $terms
     && !is_wp_error( $terms )
) {
    $term_list = wp_list_pluck( $terms, 'term_id' );

    $args = array (
        'post_type'      => 'knowledge-base',
        'orderby'        => 'meta_value_num', 
        'meta_key'       => 'top_four_num',
        'tax_query' => array(
            array(
                'taxonomy' => 'topic',
                'terms'    => $term_list,                                       
            ),
        ),                  
    );
    // Run your custom query here
}
1
Pieter Goosen