Modifica dell'ordine dell'elenco di tassonomia personalizzato


15

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

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

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

Gli artisti di GGW (Goes Good With) sono attualmente in ordine alfabetico e vogliono che vengano cambiati in modo da essere ordinati nello stesso modo in cui sono stati inseriti.

Quindi, se lo inserisci Artist1, Artist3, Artist2 è così che dovrebbe apparire sul frontend del sito.


Intendi inserire l'ordine su una base per posta?
Hakre,

Forse ordina per ID?
Bainternet,

Meglio posso dire che sono visualizzati in ordine alfabetico, quindi probabilmente non capisco la domanda. Dove lo vuoi esattamente? Puoi dare uno screenshot e un URL di esempio in cui troverai ciò che desideri sia cambiato?
MikeSchinkel,

Risposte:


0

Questo non è possibile "out of the box" ...

Le opzioni predefinite di "ordine" sono (crescente o decrescente)

  • Nome identificativo
  • Predefinito
  • lumaca
  • contare
  • term_group

Questi sono tutti dettagliati nel codice.

-

Detto questo, ci sono alcune signore e signori intelligenti qui. Se qualcuno può risolverlo, uno di questi ragazzi è sicuro!


8

Dopo un bel po 'di ricerche e test approfonditi, ho trovato la risposta.

Aggiungi questo codice alle funzioni.php del tuo tema:

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

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


Funziona anche se l'amministratore cancella la cache? Sembra precario dipendere dalla cache per l'ordine dei termini.
PBwebD

1
Se l'amministratore svuota la cache, i nuovi termini spariranno comunque perché non sono ancora stati salvati. Usiamo il codice sopra riportato su molti siti Wordpress da quando l'ho pubblicato e non ho mai avuto problemi.
Biranit Goren,

1
@BiranitGoren mi scusi per aver ripreso questo argomento, ma la preoccupazione centrale in tutte le risposte è che term_ordernon è supportato nativamente. Quindi mi chiedo, nel tuo esempio di codice, dove è term_orderdefinito in modo da poterlo ordinare?
GigiSan,

2
@GigiSan È effettivamente supportato in modo nativo, ma semplicemente non utilizzato. Wordpress ha term_order nel suo nucleo, ma non lo utilizza per impostazione predefinita. Pertanto, non è necessario definirlo, è già definito. (Vedi questo su trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren

2

Ho avuto difficoltà a trovare la risposta ai termini alfabetici secondari di una tassonomia personalizzata ... Non consiglierei di modificare i file WP di base, quindi ecco cosa ho aggiunto al mio file taxonomy.php per elencare descrizioni di tassonomia personalizzate, con collegamenti a termini secondari in ordine alfabetico. Modifica per soddisfare le tue esigenze, spero che questo aiuti qualcuno là fuori.

// 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

So che questo è un po 'un imbroglio, ma potresti sempre usare il plugin Simple Custom Post Order . È gratuito e ti consente di ordinare le tassonomie oltre ai tipi di posta.


0

E dopo per visualizzare nella pagina web il buon ordine potrebbe essere:

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

Esempio :

"poste" è il mio nome personalizzato di tassonomia, metti 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]; }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.