Configurar una query para conseguir el loop que necesitamos en una plantilla determinada de WordPress es fácil: basta crear una query personalizada mediante WP_Query
. Hay veces que solo queremos modificar una variable de la query, y para un caso concreto, no para toda la template. Por ejemplo en la template archive.php
y solo para las queries que afecten a una taxonomía determinada. En estos casos, quizás prefiramos no ensuciar el archivo de la template, archive.php
en nuestro ejemplo. Lo que podemos hacer es hacerlo usando el método set()
de WP_Query
en una función que incluiremos en el archivo functions.php
de nuestor theme.
Como explica Michael Fields, si queremos que para una taxonomía determinada llamada taxname aparezcan todos los posts y no el número configurado por omisión, podemos hacerlo mediante una función como esta:
add_filter( 'pre_get_posts', 'prefix_all_posts_in_taxname_archive' ); function prefix_all_posts_in_taxname_archive( $query ) { if ( is_tax( 'taxname' ) ) $query->set( 'posts_per_page', -1 ); return $query; }
Basta sustituir taxname por el slug real de la taxonomía, y conviene también sustituir prefix por un prefijo que asegure que el nombre de la función es único, y no se produzcan conflictos.
Para más información sobre el método set()
de WP_Query
se puede consultar el post de Justin Tadlock Showing custom post types on your home/blog page.
Actualización 12/09/2014.
A la hora de hacer la sentencia condicional para definir qué loops se filtrarán es útil contar con dos condiciones:
$query->is_main_query()
. Solo afecta al loop principal de la página, quedando fuera todos los demás, por ejemplo el loop que construye los menús.false == $query->query_vars['suppress_filters']
. No afecta a lo loops construidos conget_posts
, como explica Michael Fields.
1 comentario