Schimbarea ordinii listei taxonomiei personalizate
În mod implicit, WordPress ordonează taxonomiile personalizate (în acest caz etichetele) în ordine alfabetică, nu în ordinea în care au fost introduse în caseta de etichete.
Știe cineva o modalitate de a afișa taxonomiile personalizate în ordinea în care au fost introduse în ecranul de editare al articolului?
URL-ul în discuție este: http://granadatheater.com/
Artiștii GGW (Goes Good With) sunt în prezent în ordine alfabetică și se dorește modificarea astfel încât să fie ordonați în același mod în care au fost introduși.
Deci, dacă se introduc în ordinea Artist1, Artist3, Artist2, așa ar trebui să apară și în partea frontală a site-ului.

După o căutare destul de amplă și teste extinse, am găsit răspunsul.
Adăugați acest cod în fișierul functions.php al temei:
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; //corectat punct și virgulă lipsă
// următoarea linie se referă la etichete, dar puteți adăuga mai multe linii similare pentru orice taxonomie
$wp_taxonomies['post_tag']->sort = true;
$wp_taxonomies['post_tag']->args = array( 'orderby' => 'term_order' );
}
add_action( 'init', 'do_the_terms_in_order');
(Credit: acest cod este bazat pe - dar îmbunătățit - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html)

Funcționează acest lucru chiar dacă administratorul își șterge cache-ul? Pare riscant să depinzi de cache pentru ordinea termenilor.

Dacă administratorul își șterge cache-ul, atunci noii termeni vor dispărea oricum pentru că nu sunt încă salvați. Am folosit codul de mai sus pe multe site-uri Wordpress de când l-am postat și nu am întâlnit niciodată o problemă.

@BiranitGoren îmi cer scuze pentru reluarea acestui subiect, dar principala preocupare în toate răspunsurile este că term_order
nu este acceptat în mod nativ. Așadar, mă întreb, în exemplul tău de cod, unde este definit term_order
astfel încât să poți sorta după el?

@GigiSan este de fapt suportat nativ, dar pur și simplu nefolosit. Wordpress are term_order în nucleul său - dar nu îl folosește implicit. Prin urmare, nu este nevoie să îl definiți, este deja definit. (Vezi aici pe trac: https://core.trac.wordpress.org/ticket/9547)

Știu că asta e un pic înșelăciune, dar ai putea oricând să folosești plugin-ul Simple Custom Post Order. Este gratuit și îți permite să sortezi atât Taxonomii, cât și Tipurile de Postări.

Am avut dificultăți în a găsi răspunsul pentru afișarea termenilor copil alfabetic ai unei taxonomii personalizate... Nu aș recomanda modificarea fișierelor de bază ale WordPress, așa că iată ce am adăugat în fișierul taxonomy.php pentru a lista descrierile taxonomiei personalizate, cu linkuri către termenii copil în ordine alfabetică. Modificați pentru a se potrivi nevoilor dumneavoastră, sper că acest lucru va ajuta pe cineva.
// Obține Taxonomia Principală pentru utilizare în fișierul 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 // verifică dacă există descriere înainte de a afișa un div
if ( !empty( $term->description ) ):
echo '<div class="description">';
echo $term->description;
echo '</div>;
endif; ?>
// Acum obține termenii copil, folosind get_term și 'child_of' ne oferă ordinea alfabetică
$termchildren = get_terms( $termTaxonomy, array(
'child_of' => $term->term_id,
'hierarchical' => 0,
'fields' => 'ids',
'hide_empty' => 0
) );
// Creează o listă ordonată alfabetic cu linkuri
echo '<ul>';
foreach ($termchildren as $child) {
$term = get_term_by( 'id', $child, $termTaxonomy );
// Modifică acest echo pentru a personaliza afișarea pentru fiecare termen copil
echo '<li><a href="' . get_term_link( $term->name, $termTaxonomy ) . '" alt="' .$term->description. '">' . $term->name . '</a></li>';
}
echo '</ul>';

Și apoi, pentru a afișa în pagină web ordinea corectă, ar putea fi:
să adăugați "orderby" => "term_group" în funcția wp_get_post_terms
Exemplu:
"poste" este numele taxonomiei personalizate, puneți al vostru
$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]; }

Acest lucru nu este posibil "din cutie"...
Opțiunile implicite 'orderby' sunt (crescător sau descrescător)
- ID name
- Default
- slug
- count
- term_group
Toate acestea sunt detaliate în codex.
--
Cu toate acestea, există câțiva oameni deștepți aici. Dacă cineva poate rezolva problema, sunt sigur că unul dintre acești tipi o poate face!
