Schimbarea ordinii listei taxonomiei personalizate

21 ian. 2011, 18:36:26
Vizualizări: 55.9K
Voturi: 18

Î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.

3
Comentarii

Vrei să spui să introduci ordinea pe bază de articol?

hakre hakre
21 ian. 2011 19:49:57

Poate ordonare după id?

Bainternet Bainternet
22 ian. 2011 00:53:20

Din câte pot să-mi dau seama, ele sunt afișate în ordine alfabetică, deci probabil nu înțeleg întrebarea. Unde exact vrei asta? Poți oferi o captură de ecran și un URL exemplu unde găsești ceea ce vrei să schimbi?

MikeSchinkel MikeSchinkel
22 ian. 2011 09:56:42
Toate răspunsurile la întrebare 5
4
10

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)

21 feb. 2012 14:21:39
Comentarii

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

PBwebD PBwebD
7 dec. 2016 23:00:16

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ă.

Biranit Goren Biranit Goren
8 dec. 2016 00:10:03

@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 GigiSan
11 iun. 2019 12:38:45

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

Biranit Goren Biranit Goren
14 iul. 2019 14:36:21
0

Ș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.

11 sept. 2017 18:50:46
0

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>';
31 iul. 2012 22:44:14
0

Ș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]; }
12 dec. 2019 12:02:45
0

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!

27 ian. 2011 02:25:04