Cambiar el orden de la lista de taxonomías personalizadas

21 ene 2011, 18:36:26
Vistas: 55.9K
Votos: 18

Por defecto, WordPress ordena las taxonomías personalizadas (como etiquetas en este caso) en orden alfabético y no en el orden en que fueron ingresadas en el cuadro de etiquetas.

¿Alguien conoce alguna manera de mostrar las taxonomías personalizadas en el orden en que fueron ingresadas en la pantalla de edición de la entrada?

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

Los artistas GGW (Goes Good With) están actualmente en orden alfabético y quieren cambiarlo para que estén ordenados de la misma manera en que fueron ingresados.

Entonces si lo ingresan como Artista1, Artista3, Artista2, así es como debería mostrarse en el frontend del sitio.

3
Comentarios

¿Te refieres a establecer un orden por cada entrada?

hakre hakre
21 ene 2011 19:49:57

¿Quizás ordenar por ID?

Bainternet Bainternet
22 ene 2011 00:53:20

Por lo que veo, se muestran en orden alfabético, así que probablemente no estoy entendiendo la pregunta. ¿Dónde exactamente quieres esto? ¿Puedes compartir una captura de pantalla y una URL de ejemplo donde se vea lo que quieres cambiar?

MikeSchinkel MikeSchinkel
22 ene 2011 09:56:42
Todas las respuestas a la pregunta 5
4
10

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

Añade este código al functions.php de tu 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;  //corregido punto y coma faltante
    // lo siguiente se relaciona con etiquetas, pero puedes añadir más líneas como esta para cualquier taxonomía
    $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 está basado en - pero mejorado - http://wordpress.kdari.net/2011/07/listing-tags-in-custom-order.html)

21 feb 2012 14:21:39
Comentarios

¿Funciona esto incluso si el administrador borra su caché? Parece arriesgado depender de la caché para el orden de los términos.

PBwebD PBwebD
7 dic 2016 23:00:16

Si el administrador borra su caché, entonces los nuevos términos desaparecerán de todos modos porque no se han guardado aún. Hemos estado usando el código anterior en muchos sitios de Wordpress desde que lo publiqué y nunca he tenido ningún problema.

Biranit Goren Biranit Goren
8 dic 2016 00:10:03

@BiranitGoren discúlpame por retomar este tema, pero la preocupación central en todas las respuestas es que term_order no es compatible de forma nativa. Así que me pregunto, en tu ejemplo de código, ¿dónde está definido term_order para que puedas ordenar por él?

GigiSan GigiSan
11 jun 2019 12:38:45

@GigiSan en realidad SÍ es compatible de forma nativa, pero simplemente no se usa. WordPress tiene term_order en su núcleo, pero no lo utiliza por defecto. Por lo tanto, no necesitas definirlo, ya está definido. (Ver esto en trac: https://core.trac.wordpress.org/ticket/9547)

Biranit Goren Biranit Goren
14 jul 2019 14:36:21
0

Sé que es un poco como hacer trampa, pero siempre puedes usar el plugin Simple Custom Post Order. Es gratuito y te permite ordenar Taxonomías además de Tipos de Entradas.

11 sept 2017 18:50:46
0

He estado luchando para encontrar la respuesta sobre cómo mostrar términos hijos alfabéticos de una taxonomía personalizada... No recomendaría modificar archivos núcleo de WP, así que aquí está lo que añadí a mi archivo taxonomy.php para listar las descripciones de taxonomías personalizadas, con enlaces a términos hijos en orden alfabético. Modifícalo según tus necesidades, espero que esto ayude a alguien por ahí.

// Obtener la taxonomía principal para usar en el archivo de plantilla
$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 // verificar si hay descripción antes de mostrar un div 
if ( !empty( $term->description ) ): 
  echo '<div class="description">';
  echo $term->description;
  echo '</div>;
endif; ?>

// Ahora obtener términos hijos, usando get_term con 'child_of' nos da el orden alfabético
$termchildren = get_terms( $termTaxonomy, array(
  'child_of'     => $term->term_id,
  'hierarchical' => 0,
  'fields'       => 'ids',
  'hide_empty'   => 0
) );

// Crear una lista enlazada alfabética
echo '<ul>';
foreach ($termchildren as $child) {
  $term = get_term_by( 'id', $child, $termTaxonomy );

  // Modifica este echo para personalizar la salida de cada término hijo
  echo '<li><a href="' . get_term_link( $term->name, $termTaxonomy ) . '" alt="' .$term->description. '">' . $term->name . '</a></li>';
}
echo '</ul>';
31 jul 2012 22:44:14
0

Y después para mostrar en la página web el orden correcto podría ser:

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

Ejemplo:

"poste" es el nombre de mi taxonomía personalizada, 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]; }
12 dic 2019 12:02:45
0

Esto no es posible "de forma predeterminada"...

Las opciones predeterminadas de 'orderby' son (ascendente o descendente)

  • ID nombre
  • Predeterminado
  • slug
  • count
  • term_group

Todas estas opciones están detalladas en el codex.

--

Dicho esto, hay algunas personas inteligentes aquí. ¡Si alguien puede resolverlo, estoy seguro que uno de ellos podrá hacerlo!

27 ene 2011 02:25:04