Ordenar publicaciones por nombre de taxonomía personalizada

15 oct 2012, 21:09:55
Vistas: 18.8K
Votos: 2

¿Es posible ordenar publicaciones (tipo de contenido personalizado) por categoría/taxonomía (nombre, desc)?

Por ejemplo, mis categorías serían:

  • Temporada 2012
    • alguna publicación
    • alguna publicación
    • alguna publicación
  • Temporada 2011
    • alguna publicación
    • alguna publicación
    • alguna publicación
  • Temporada 2010
  • etc...
0
Todas las respuestas a la pregunta 3
4
11

Una solución sería-

$terms = get_terms('taxonomy-name');
foreach($terms as $term) {
    $posts = get_posts(array(
            'post_type' => 'custom_post_type_name',
            'tax_query' => array(
                array(
                    'taxonomy' => 'taxonomy-name',
                    'field' => 'slug',
                    'terms' => $term->slug
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
        // haz lo que necesites hacer con los posts aquí
    }
}
15 oct 2012 21:24:18
Comentarios

Buena respuesta, aunque deberías cuidar tu indentación ;)

kovshenin kovshenin
15 oct 2012 21:59:06

Tienes razón, tendré más cuidado en el futuro. Edité la respuesta anterior

Mridul Aggarwal Mridul Aggarwal
15 oct 2012 22:07:11

¿Hay alguna forma de ordenar foreach $term->name, DESC?

Iladarsda Iladarsda
15 oct 2012 22:11:32

sí, existe. Cambia la primera línea a- $terms = get_terms('taxonomy-name', array('order' => 'DESC')); Revisa esta página del codex como referencia completa- http://codex.wordpress.org/Function_Reference/get_terms

Mridul Aggarwal Mridul Aggarwal
15 oct 2012 22:17:00
0

Sé que esta es una pregunta antigua que ya tiene una excelente respuesta, pero hoy estuve luchando durante horas con algo muy similar y se me ocurrió un bucle alternativo.

También puedes personalizar un poco la solución (excelente) de Mridul si quieres que esto funcione en la página de archivo de una taxonomía. En otras palabras, puedes ordenar un archivo de taxonomía personalizada por otra taxonomía usando esta solución.

Comparto esto porque hoy pasé cuatro horas lidiando con este problema, y si alguien más está intentando crear archivos de taxonomías personalizadas ordenados por una taxonomía diferente, así es como se hace. (Además, esta es mi primera respuesta en StackExchange — ¡por favor sean amables! :) )

Esto comienza exactamente como la solución de Mridul. Consulta la taxonomía por la que deseas ordenar tus publicaciones.

$terms = get_terms( array(
    'taxonomy' => 'custom_taxonomy_one',
    'parent' => 0, // Esto me ayudó a eliminar taxonomías repetitivas; quizás quieras omitir esto
) );

foreach($terms as $term) {
    echo '<h2>' . $term->name . '</h2>'; // Muestra el nombre del término

Aquí es donde se diferencia un poco de la respuesta de Mridul. Quieres consultar dos taxonomías y asegurarte de que la relación entre ellas esté configurada como "AND", lo que significa que las publicaciones listadas cumplen con los criterios de estar en ambas taxonomías.

En este caso, las publicaciones en "custom_post_type" deben coincidir con el slug del primer término y el nombre de otro. ¡Espero que el código tenga sentido para todos!

    $posts = get_posts(array(
            'post_type' => 'custom_post_type', // Obtiene publicaciones del tipo de publicación personalizada
            'tax_query' => array(
                'relation' => 'AND', // las publicaciones deben coincidir con ambas taxonomías
                array(
                    'taxonomy' => 'custom_taxonomy_one',
                    'field' => 'slug',
                    'terms' => $term->slug // coincide con el slug del término en el array anterior
                ),
                array(
                    'taxonomy' => 'custom_taxonomy_two',
                    'field' => 'slug',
                    'terms' => 'custom_taxonomy_two_term_name'
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
       // Haz lo tuyo
    }
}
13 ago 2016 03:33:43
1

Bucle alternativo, donde tax = category y el tipo de entrada personalizado post type = "results"

$args = array( 'taxonomy' => 'category' );
$terms = get_terms( 'category', $args);

//INICIO DEL BUCLE FOR EACH
foreach ($terms as $term) {

            $post_type = 'results';
            $tax = 'category';
            $tax_terms = get_terms( $tax );
            if ($tax_terms) {
                foreach ($tax_terms  as $tax_term) {
                $args = array(
                    'post_type' => $post_type,
                    "$tax" => $tax_term->slug,
                    'post_status' => 'publish',
                    'posts_per_page' => -1,
                    'caller_get_posts'=> 1
                );

                $my_query = null;
                $my_query = new WP_Query($args);

                if( $my_query->have_posts() ) : ?>

                        // WHILE
                        <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>

                        // Hacer algo

                        <?php endwhile; ?>
                        // FIN WHILE


                <?php else : ?>
    <?php endif; wp_reset_query(); ?>

}
// FIN DEL BUCLE FOR EACH
15 oct 2012 21:45:48
Comentarios

"caller_get_posts" está obsoleto por cierto. Usa "ignore_sticky_posts" Fuente - http://codex.wordpress.org/Class_Reference/WP_Query#Sticky_Post_Parameters

Mridul Aggarwal Mridul Aggarwal
15 oct 2012 22:02:15