Modificare l'ordine dell'elenco delle Tassonomie Personalizzate
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.

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)

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

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.

@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 è 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)

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.

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

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

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!
