Hola @aitormendez,
No tienes porque eliminarla, sino aprovecharla.
Usa pre_get_posts
y set
para crear una tax_query
y cambiar la manera de ordenacion, etc…
Con ello, recibirias todos los posts de book, ordenados por la taxonomia despues podrias crear varios loops para filtrar por el nombre de la taxonomia.
Tambien podrias solo incluir x taxonomia y despues crear loops por cada taxonomia que quede.
Sea como sea tienes que tener presente la paginacion, ya que puedes tener problemas si tienes intencion de usarla.
Mirate este link https://codex.wordpress.org/Class_Reference/WP_Query
-
Esta respuesta fue modificada hace 6 años por kallookoo. Razón: link WP_Query
Tienes razón. Ahora que lo dices, suena obvio. Gracias por la respuesta.
Pongo aquí mi solución. No he conseguido ordenar los posts por taxonomy term con pre_get_posts
. He estado investigando la manera de hacerlo y no he dado con ello. Sin embargo, la solución era muy sencilla iterando dos veces sobre los posts de la main query:
@while (have_posts()) @php the_post() @endphp
@if (has_term('bold', 'weight'))
@include('partials.content-'.get_post_type())
@endif
@endwhile
@while (have_posts()) @php the_post() @endphp
@if (has_term('light', 'weight'))
@include('partials.content-'.get_post_type())
@endif
@endwhile
La notación es de Blade, espero que se entienda: https://laravel.com/docs/5.7/blade
Vale, ya lo he entendido: La tax_query
es sólo para recuperar los posts, pero no ordena los posts ¿no? Es decir, luego tengo que iterar igualmente dos veces por los posts (dos loops).
Lo que me falla ahora es la notación para el método set
. He intentado esto, pero no funciona la parte de la tax_query:
add_filter('pre_get_posts', function ($query) {
if ( !$query->is_admin() && $query->is_archive('book') && $query->is_main_query() ) {
$query->set( 'nopaging', true );
$query->set( 'meta_key', 'production_date' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'DESC' );
$query->set( 'tax_query', array(
'taxonomy' => 'book',
'field' => 'slug',
'terms' => array( 'light', 'comedy' ),
) );
return;
}
});
¿Cómo sería la notación correcta?
Buenas,
No entiendo porque usas la notacion de lavarel, pero eso es secundario.
Tienes razon no me acordaba que directamente no puedes ordenarlo por la tax.
Lamento que no me entendieses y leyendo lo que te conteste me falto decirte que mirases los filtros que tienes al final del link que te puse.
La tax_query
no te funciona porque debe ser un array de arrays
$query->set( 'tax_query', array(
array(
'taxonomy' => 'book',
'field' => 'slug',
'terms' => array( 'light', 'comedy' ),
),
) );
Ahora lo que deberias mirarte son los filtros para acabar de refinarlo, aparte te recomiendo que mires el source para ver como actua, por lo menos a mi me ayuda.
Eso es! muchas gracias @kallookoo.
Lo de Laravel es porque el starter theme que utilizo lo lleva implementado:
https://roots.io/sage/docs/blade-templates/