Modificare l'ordine dell'elenco delle Tassonomie Personalizzate

21 gen 2011, 18:36:26
Visualizzazioni: 55.9K
Voti: 18

Per impostazione predefinita, WordPress ordina le tassonomie personalizzate (come i tag in questo caso) in ordine alfabetico e non nell'ordine in cui sono state inserite nella casella dei tag.

Qualcuno conosce un modo per mostrare le tassonomie personalizzate nell'ordine in cui sono state inserite nella schermata di modifica del post?

L'URL in questione è: http://granadatheater.com/

Gli artisti GGW (Goes Good With) sono attualmente in ordine alfabetico e si desidera modificarli in modo che siano ordinati nello stesso modo in cui sono stati inseriti.

Quindi se vengono inseriti come Artista1, Artista3, Artista2, dovrebbero apparire in questo stesso ordine nel frontend del sito.

3
Commenti

Intendi impostare l'ordine per ogni singolo articolo?

hakre hakre
21 gen 2011 19:49:57

Forse ordinare per ID?

Bainternet Bainternet
22 gen 2011 00:53:20

Da quello che vedo vengono visualizzati in ordine alfabetico, quindi probabilmente non ho capito la domanda. Dove esattamente vuoi questo cambiamento? Puoi fornire uno screenshot e un URL di esempio dove trovare ciò che vuoi modificare?

MikeSchinkel MikeSchinkel
22 gen 2011 09:56:42
Tutte le risposte alla domanda 5
4
10

Dopo diverse ricerche e test approfonditi, ho trovato la soluzione.

Aggiungi questo codice al file functions.php del tuo tema:

function set_the_terms_in_order( $terms, $id, $taxonomy ) {
    // Recupera i termini dalla cache se presenti
    $terms = wp_cache_get( $id, "{$taxonomy}_relationships_sorted" );
    if ( false === $terms ) {
        // Ottieni i termini ordinati per 'term_order' se non in cache
        $terms = wp_get_object_terms( $id, $taxonomy, array( 'orderby' => 'term_order' ) );
        wp_cache_add($id, $terms, $taxonomy . '_relationships_sorted');
    }
    return $terms;
}
// Aggiungi il filtro per ordinare i termini
add_filter( 'get_the_terms', 'set_the_terms_in_order', 10, 4 );

function do_the_terms_in_order() {
    global $wp_taxonomies;  // Correzione: punto e virgola mancante
    // La seguente riga si riferisce ai tag, ma puoi aggiungere più righe simili per qualsiasi tassonomia
    $wp_taxonomies['post_tag']->sort = true;
    $wp_taxonomies['post_tag']->args = array( 'orderby' => 'term_order' );    
}
// Esegui la funzione all'inizializzazione
add_action( 'init', 'do_the_terms_in_order');

(Credits: questo codice è basato su - ma migliorato - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html)

21 feb 2012 14:21:39
Commenti

Funziona anche se l'amministratore svuota la cache? Sembra rischioso dipendere dalla cache per l'ordinamento dei termini.

PBwebD PBwebD
7 dic 2016 23:00:16

Se l'amministratore svuota la cache, i nuovi termini scompariranno comunque perché non sono ancora stati salvati. Abbiamo utilizzato il codice sopra su molti siti WordPress da quando l'ho pubblicato e non ho mai riscontrato problemi.

Biranit Goren Biranit Goren
8 dic 2016 00:10:03

@BiranitGoren scusami se riprendo questo argomento, ma la preoccupazione centrale in tutte le risposte è che term_order non sia supportato nativamente. Quindi mi chiedo, nel tuo esempio di codice, dove è definito term_order in modo da poterlo usare per l'ordinamento?

GigiSan GigiSan
11 giu 2019 12:38:45

@GigiSan è effettivamente supportato in modo nativo, ma semplicemente non utilizzato. WordPress ha term_order nel suo core, ma non ne fa uso di default. Pertanto, non è necessario definirlo, è già definito. (Vedi questo su trac: https://core.trac.wordpress.org/ticket/9547)

Biranit Goren Biranit Goren
14 lug 2019 14:36:21
0

So che è un po' come barare, ma potresti sempre usare il plugin Simple Custom Post Order. È gratuito e ti permette di ordinare sia le Tassonomie che i Tipi di Post.

11 set 2017 18:50:46
0

Ho avuto difficoltà a trovare la risposta per ottenere i termini figli in ordine alfabetico per una tassonomia personalizzata... Non consiglierei di modificare i file core di WordPress, quindi ecco cosa ho aggiunto al mio file taxonomy.php per elencare le descrizioni delle tassonomie personalizzate, con link ai termini figli in ordine alfabetico. Modificalo secondo le tue esigenze, spero possa aiutare qualcuno là fuori.

// Ottieni la tassonomia principale da usare nel template
$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 // verifica la presenza della descrizione prima di creare un div
if ( !empty( $term->description ) ): 
  echo '<div class="description">';
  echo $term->description;
  echo '</div>;
endif; ?>

// Ora ottieni i termini figli, usando get_term con 'child_of' ci dà l'ordine alfabetico
$termchildren = get_terms( $termTaxonomy, array(
  'child_of'     => $term->term_id,
  'hierarchical' => 0,
  'fields'       => 'ids',
  'hide_empty'   => 0
) );

// Crea una lista linkata in ordine alfabetico
echo '<ul>';
foreach ($termchildren as $child) {
  $term = get_term_by( 'id', $child, $termTaxonomy );

  // Modifica questo echo per personalizzare l'output di ogni termine figlio
  echo '<li><a href="' . get_term_link( $term->name, $termTaxonomy ) . '" alt="' .$term->description. '">' . $term->name . '</a></li>';
}
echo '</ul>';
31 lug 2012 22:44:14
0

E dopo per visualizzare nella pagina web l'ordine corretto potrebbe essere:

inserire "orderby" => "term_group" nel tuo wp_get_post_terms

Esempio:

"poste" è il nome della mia tassonomia personalizzata, inserisci il tuo

$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]; }
12 dic 2019 12:02:45
0

Non è possibile "fuori dalla scatola"...

Le opzioni predefinite per 'orderby' sono (crescente o decrescente)

  • ID nome
  • Predefinito
  • slug
  • count
  • term_group

Tutte queste sono dettagliate nel codex.

--

Detto questo, ci sono alcune persone intelligenti qui. Se qualcuno può risolverlo, sono sicuro che uno di loro sarà in grado!

27 gen 2011 02:25:04