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.