Mostrar un número diferente de publicaciones por página según el contexto (ej. página de inicio, búsqueda, archivo)

11 ago 2010, 19:52:23
Vistas: 12.5K
Votos: 22

En los Ajustes de Lectura, hay un lugar para establecer el número de publicaciones mostradas que afecta a todas las páginas. Me gustaría mostrar una cantidad específica de publicaciones en la página de inicio y un número diferente en páginas como archivos, resultados de búsqueda, etc.

Ajustes de lectura - Mostrar máximo de publicaciones por página

Sé que podría hacer esto editando los archivos del tema y cambiando los parámetros de la consulta, pero preferiría tener acceso fácil a una página de ajustes simple. Hace tiempo encontré un plugin que hacía esto, pero ahora no lo encuentro.

¿Alguien conoce algún plugin para hacer esto, o incluso una función que pueda añadir a functions.php para lograr lo mismo?

1
Comentarios

Probablemente estabas pensando en el plugin 'Different Posts Per Page' de @chip-bennett: http://www.chipbennett.net/plugins/cbnet-different-posts-per-page/ que hace lo que quieres de manera gráfica.

Tom Auger Tom Auger
28 oct 2011 18:09:39
Todas las respuestas a la pregunta 4
1
25

Creo que la mejor manera de hacer esto en un plugin es ejecutar la siguiente función de ejemplo cuando se encuentre el hook de acción pre_get_posts. El objeto $wp_query está disponible, lo que significa que tus etiquetas condicionales están disponibles, pero antes de que WordPress obtenga los posts, lo que significa que estás cambiando las variables de consulta antes de que se ejecute la primera consulta, en lugar de agregar una segunda consulta como cuando se usa query_posts() en un archivo de tema.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

// esto agrega la función anterior a la acción 'pre_get_posts'     
add_action('pre_get_posts', 'custom_posts_per_page');
11 ago 2010 21:08:21
Comentarios

Utilizo esta función en mi propio sitio. Fue fácil copiarla y pegarla aquí para ti.

kevtrout kevtrout
12 ago 2010 19:11:04
2

podrías hacer un bucle personalizado usando query_posts, y especificar el número de publicaciones mediante is_home, is_archive, etc.

solo una simple declaración if junto con query_posts

11 ago 2010 20:07:58
Comentarios

Sí, mencioné eso en mi pregunta. Estoy buscando una forma de hacerlo para no tener que editar múltiples archivos del tema para cambiar los ajustes. Gracias.

Doug Doug
12 ago 2010 18:21:07

Es una idea bastante mala hacerlo de esta manera. WordPress ya ejecuta una consulta. Si colocas query_posts en tu tema, ignorarás la consulta original y harás otra redundante.

Krzysiek Dróżdż Krzysiek Dróżdż
11 dic 2013 20:45:07
0
-1

Para agregar a esta pregunta. ¿Alguien sabe cómo determinar post_per_page para esta función function custom_posts_per_page($query) si se agrega una nueva página a index.php de esta manera:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>
20 ene 2011 08:56:50
3
-1

Me doy cuenta de que podría hacer esto editando los archivos del tema y cambiando los parámetros de consulta allí, pero preferiría tener un acceso más fácil a una página de configuración simple.

En aras de la exhaustividad, descubrí que query_posts combinado con la concatenación de $query_string funciona bien.

Coloqué este código en index.php (mi tema no tiene category.php) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

Por supuesto, lo que estamos haciendo aquí es modificar la cadena de consulta interna del bucle, anulando el número predeterminado de publicaciones por página.

Funciona de maravilla para proporcionar una lista más pequeña de publicaciones en la página de inicio donde muestro publicaciones completas, y una lista mucho más grande de publicaciones en otros lugares (categorías, por fecha, etc.) donde solo muestro resúmenes de publicaciones.

Sin embargo, ten en cuenta que, a diferencia de la respuesta aceptada, esto ejecutará la consulta dos veces, por lo que no es una solución tan óptima.

6 jul 2011 23:25:12
Comentarios

Jeff, estaba buscando un lugar centralizado para controlar el número de publicaciones devueltas en diferentes contextos. Tu respuesta solo hace eso si usas index.php para manejar TODOS los contextos, lo cual la mayoría de los temas no hacen. Además de aumentar las llamadas a la base de datos (lo que afecta el rendimiento), tu técnica también puede cambiar la respuesta a etiquetas condicionales (por ejemplo, is_home() o is_front_page) de maneras inesperadas. Finalmente, si deseas agregar bucles secundarios a una página, NO deberías usar query_posts, sino usar "new WP_Query" en su lugar (o get_posts).

Doug Doug
7 jul 2011 19:26:45

@doug esto no es un bucle secundario, está sobrescribiendo el bucle principal — y sí, este tema en particular usa index.php para renderizar todo, es bastante minimalista. Sentí que esto tenía más sentido aquí como respuesta, pero si lo prefieres puedo hacer mi propia pregunta y responderla si esta respuesta te ofende de alguna manera.

Jeff Atwood Jeff Atwood
7 jul 2011 21:51:10

En realidad malinterpreté tu penúltimo párrafo y pensé que las listas de publicaciones "más grandes" y "más pequeñas" estaban en la misma página, así que mi última oración anterior era irrelevante. Y sí, es perfectamente legítimo poner todo tu código en index.php si así lo deseas. Y si ese es el caso, entonces tu método es una forma rápida y fácil de hacer esto, así que eliminaré mi voto negativo después de que termine el bloqueo de 20 horas. Aun así, enviar una nueva consulta en lugar de modificar la consulta original como en la respuesta de kevtrout es menos deseable por las razones ya mencionadas (por ti, por mí y por el WP Codex).

Doug Doug
8 jul 2011 16:24:40