Modifier l'ordre de la liste de taxonomie personnalisée


15

Par défaut, WordPress commande les taxonomies personnalisées (en tant que balises dans ce cas) par ordre alphabétique et non par l'ordre dans lequel elles ont été entrées dans la zone de balise.

Quelqu'un connaît-il un moyen d'afficher les taxonomies personnalisées dans l'ordre dans lequel elles ont été entrées dans l'écran de post-édition?

L'URL en question est: http://granadatheater.com/

Les artistes de GGW (Goes Good With) sont actuellement classés par ordre alphabétique et ils veulent que cela soit changé afin qu'ils soient classés de la même manière qu'ils ont été saisis.

Donc, si vous entrez Artist1, Artist3, Artist2, c'est ainsi que cela devrait apparaître sur le frontend du site.


Vous voulez dire entrer une commande par poste?
hakre

Peut-être commander par identifiant?
Bainternet

Je peux mieux dire qu'ils sont affichés par ordre alphabétique, donc je ne comprends probablement pas la question. Où voulez-vous exactement cela? Pouvez-vous donner une capture d'écran et un exemple d'URL où vous trouverez ce que vous voulez changer?
MikeSchinkel

Réponses:


0

Ce n'est pas possible "prêt à l'emploi" ...

Les options 'orderby' par défaut sont (ascendantes ou descendantes)

  • Nom d'ID
  • Défaut
  • limace
  • compter
  • term_group

Ils sont tous détaillés dans le codex.

-

Cela dit, il y a des femmes et des hommes intelligents ici. Si quelqu'un peut le résoudre, l'un de ces gars-là, j'en suis sûr!


8

Après pas mal de recherches et de tests approfondis, j'ai trouvé la réponse.

Ajoutez ce code aux fonctions de votre thème.php:

function set_the_terms_in_order ( $terms, $id, $taxonomy ) {
    $terms = wp_cache_get( $id, "{$taxonomy}_relationships_sorted" );
    if ( false === $terms ) {
        $terms = wp_get_object_terms( $id, $taxonomy, array( 'orderby' => 'term_order' ) );
        wp_cache_add($id, $terms, $taxonomy . '_relationships_sorted');
    }
    return $terms;
}
add_filter( 'get_the_terms', 'set_the_terms_in_order' , 10, 4 );

function do_the_terms_in_order () {
    global $wp_taxonomies;  //fixed missing semicolon
    // the following relates to tags, but you can add more lines like this for any taxonomy
    $wp_taxonomies['post_tag']->sort = true;
    $wp_taxonomies['post_tag']->args = array( 'orderby' => 'term_order' );    
}
add_action( 'init', 'do_the_terms_in_order');

(Crédit: cela est basé sur - mais amélioré - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html )


Est-ce que cela fonctionne même si l'administrateur vide son cache? Semble précaire à dépendre du cache pour l'ordre des termes.
PBwebD du

1
Si l'administrateur vide son cache, les nouveaux termes disparaîtront de toute façon car ils ne sont pas encore enregistrés. Nous utilisons le code ci-dessus sur de nombreux sites Wordpress depuis que j'ai posté cela et je n'ai jamais rencontré de problème.
Biranit Goren

1
@BiranitGoren me pardonne d'avoir repris ce sujet, mais la préoccupation centrale dans toutes les réponses est qu'elle term_ordern'est pas prise en charge de manière native. Je me demande donc, dans votre exemple de code, où est term_orderdéfini pour que vous puissiez trier dessus?
GigiSan

2
@GigiSan est en fait nativement pris en charge, mais simplement inutilisé. Wordpress a term_order dans son noyau - mais ne l'utilise pas par défaut. Par conséquent, vous n'avez pas besoin de le définir, il est déjà défini. (Voir ceci sur trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren

2

J'ai eu du mal à trouver la réponse aux termes alphabétiques des enfants d'une taxonomie personnalisée ... Je ne recommanderais pas de modifier les fichiers WP principaux, alors voici ce que j'ai ajouté à mon fichier taxonomy.php pour répertorier les descriptions de taxonomie personnalisées, avec des liens aux termes enfants par ordre alphabétique. Modifiez en fonction de vos besoins, j'espère que cela aidera quelqu'un là-bas.

// Get Main Taxonomy for use in template file
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$termTaxonomy = $term->taxonomy;

<h1><?php echo apply_filters( 'the_title', $term->name ); ?></h1>

<?php // test for description before unleashing a div 
if ( !empty( $term->description ) ): 
  echo '<div class="description">';
  echo $term->description;
  echo '</div>;
endif; ?>

// Now get children terms, using get_term & 'child_of' get's us alphabetical order
$termchildren = get_terms( $termTaxonomy, array(
  'child_of'     => $term->term_id,
  'hierarchical' => 0,
  'fields'       => 'ids',
  'hide_empty'   => 0
) );

// Make an alphabetical linked list
echo '<ul>';
foreach ($termchildren as $child) {
  $term = get_term_by( 'id', $child, $termTaxonomy );

  // Modify this echo to customize the output for each child term
  echo '<li><a href="' . get_term_link( $term->name, $termTaxonomy ) . '" alt="' .$term->description. '">' . $term->name . '</a></li>';
}
echo '</ul>';

2

Je sais que c'est une sorte de tricherie, mais vous pouvez toujours utiliser le plugin Simple Custom Post Order . C'est gratuit et cela vous permet de trier les taxonomies en plus des types de publication.


0

Et après avoir affiché dans la page Web le bon ordre, cela pourrait être:

mettre "orderby" => "term_group" dans vos wp_get_post_terms

Exemple :

"poste" est mon nom de taxonomie personnalisé, mettez le vôtre

$poste =  wp_get_post_terms($post->ID, 'poste', array("fields" => "names", "orderby" => "term_group"));
        if(!empty($poste[0])){ echo $poste[0];}
        if(!empty($poste[1])){
          echo " - ", $poste[1]; }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.