web-dev-qa-db-fra.com

Termes de commande par term_order

Contexte

  • Type de message: Ressources
  • Taxonomie: Type de support, Terme: Audio
  • Taxonomy: _ Series

Le code suivant affiche une liste unique de la taxonomie personnalisée "Series"

Je veux commander la liste par term_order, mais cela ne fonctionne pas. Aucune suggestion?

Le site . Actuellement, il est commandé par ID

    <?php
                $post_data = array();

                $my_query = new WP_Query( array( 
                        'post_type' => 'resource',
                        'posts_per_page' => -1,
                        'media_type' => 'audio'

                    ) 
                );

                if ( $my_query->have_posts() ) {
                    while ( $my_query->have_posts() ) {
                        $my_query->the_post();
                        $post_data[] = get_the_ID();
                    }
                }

// Start with whatever ID you want to have from Media Type
                $audio = 16;

                // Get all those post_ids for that term
                $post_ids = get_objects_in_term( $audio, 'media_type', array('post_status' => 'publish') );

                // Then get the series terms for those post ids
                $terms = wp_get_object_terms( $post_data, 'series', array('fields' => 'ids', 'orderby' => 'menu_order' ) );
                $result = array_values( array_unique($terms) );

                ?>


            <?php
        $a = $result;

        foreach ($a as $v) {
        $term = get_term( $v, 'series' );
        $name = $term->name;
        $slug = $term->slug;
        echo '<div class="resource-item"><a href="'.get_term_link($slug, 'series').'" title="'.$name.'"><div class="play"></div><li>'.$name.'</li></a></div>';      
        } 

        ?>
1
izharbuen

Au lieu de menu_order, essayez term_order.

Selon la documentation sur le Codex , wp_get_object_terms prend en charge:

  • prénom
  • compter
  • limace
  • term_group
  • term_order et
  • term_id
1
Jonathan Wold

Plusieurs années plus tard,

Vous pouvez ajouter ce code dans votre functions.php:

function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
    return $query_vars['orderby'] == 'term_order' ? 'term_order' : $orderby;
}

add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );

Ce code force WP à utiliser l'argument orderby => term_order dans votre requête de terme.

Comme il s’agit de l’un des meilleurs résultats sur Google et que rien de ce qui précède n’a fonctionné pour moi, il semble que les termes renvoyés aient été renvoyés dans un ordre correspondant à celui affiché dans l’administrateur ...

 get_terms([
  'taxonomy'   => 'whatever_you_want',
  'meta_key'   => 'order',
  'orderby'    => 'meta_value_num'
]);

Si cela peut aider quelqu'un, WP enregistre une valeur dans la table termmeta dans l'ordre des clés, qui représente sa position d'affichage dans les menus de l'administrateur. Évidemment, il faudrait l'adapter si vous vouliez interroger d'autres méta en même temps.

0
Ben White