Cambiar el orden de la Lista de taxonomía personalizada

15

Por defecto, WordPress ordena taxonomías personalizadas (como etiquetas en este caso) por orden alfabético, no por el orden en que se ingresaron en el cuadro de etiqueta.

¿Alguien sabe de alguna manera de mostrar las taxonomías personalizadas en el orden en que se ingresaron en la pantalla de edición posterior?

La url en cuestión es: http://granadatheater.com/

Los artistas de GGW (Goes Good With) están actualmente en orden alfabético y quieren que se modifique para que se ordenen de la misma manera en que se ingresaron.

Entonces, si lo ingresa Artist1, Artist3, Artist2, así es como debería aparecer en la interfaz del sitio.

curtismchale
fuente
¿Te refieres a poner orden en una base por publicación?
Hakre
Tal vez ordenar por id?
Bainternet
Lo mejor que puedo decir es que se muestran en orden alfabético, por lo que probablemente no entiendo la pregunta. ¿Dónde exactamente quieres esto? ¿Puede dar una captura de pantalla y una URL de ejemplo donde encontrará lo que desea cambiar?
MikeSchinkel

Respuestas:

0

Esto no es posible "fuera de la caja" ...

Las opciones predeterminadas 'ordenar por' son (ascendente o descendente)

  • Nombre de identificación
  • Defecto
  • babosa
  • contar
  • term_group

Todo esto se detalla en el códice.

-

Dicho esto, hay algunas damas y caballeros inteligentes aquí. Si alguien puede resolverlo, ¡uno de estos tipos puede estar seguro!

George Wiscombe
fuente
8

Después de bastante búsqueda y extensas pruebas, encontré la respuesta.

Agregue este código a las funciones de su tema.php:

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

(Crédito: esto se basa en, pero mejoró, http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html )

Biranit Goren
fuente
¿Esto funciona incluso si el administrador borra su caché? Parece precario depender de la memoria caché para el orden de los términos.
PBwebD
1
Si el administrador borra su caché, los nuevos términos desaparecerán de todos modos porque aún no se han guardado. Hemos estado usando el código anterior en muchos sitios de Wordpress desde que publiqué esto y nunca me he encontrado con un problema.
Biranit Goren
1
@BiranitGoren, perdóname por retomar este tema, pero la preocupación central en todas las respuestas es que term_orderno es compatible de forma nativa. Entonces, me pregunto, en su ejemplo de código, ¿dónde está term_orderdefinido para que pueda ordenarlo?
GigiSan
2
@GigiSan es realmente compatible de forma nativa, pero simplemente no se usa. Wordpress tiene term_order en su núcleo, pero no lo utiliza de forma predeterminada. Por lo tanto, no necesita definirlo, ya está definido. (Vea esto en trac: core.trac.wordpress.org/ticket/9547 )
Biranit Goren
2

He estado luchando por encontrar la respuesta a los términos alfabéticos secundarios de una taxonomía personalizada ... No recomendaría alterar los archivos WP principales, así que esto es lo que agregué a mi archivo taxonomy.php para enumerar las descripciones de las taxonomías personalizadas, con enlaces a términos secundarios en orden alfabético. Modifique para satisfacer sus necesidades, espero que esto ayude a alguien por ahí.

// 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>';
Erik Rodne
fuente
2

Sé que esto es una especie de trampa, pero siempre puedes usar el complemento Simple Custom Post Order . Es gratis y le permite ordenar Taxonomías además de Tipos de publicaciones.

Nate
fuente
0

Y luego de mostrar en la página web el buen orden podría ser:

poner "orderby" => "term_group" en sus wp_get_post_terms

Ejemplo:

"poste" es mi nombre de taxonomía personalizado, pon el tuyo

$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]; }
Julie Chaumard
fuente