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

21

En la Configuración de lectura, hay un lugar para establecer la cantidad de publicaciones mostradas que afecta la cantidad de publicaciones mostradas en todos los contextos. En cambio, me gustaría mostrar una cierta cantidad de publicaciones en la página de inicio y una cantidad diferente de publicaciones en páginas como archivo, resultados de búsqueda, etc.

lectura-configuración-blog-páginas-show-a-más-por-página

Me doy cuenta de que podría hacer esto editando los archivos de 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. Hace mucho tiempo, me encontré con un complemento que hizo esto, pero ahora no puedo localizarlo.

¿Alguien sabe de un complemento para hacer esto, o incluso una función que podría poner en functions.php para lograr lo mismo?

Doug
fuente
Probablemente estabas pensando en el complemento 'Diferentes publicaciones por página' de @ chip-bennett: chipbennett.net/plugins/cbnet-different-posts-per-page que hace lo que quieres de forma gráfica.
Tom Auger

Respuestas:

23

Creo que la mejor manera de hacer esto en un complemento es ejecutar la siguiente función de muestra cuando pre_get_postsse encuentra el gancho de acción. El $wp_queryobjeto está disponible, lo que significa que sus etiquetas condicionales están disponibles, pero antes de que WordPress obtenga las publicaciones, lo que significa que está cambiando las variables de consulta antes de que se ejecute la primera consulta, en lugar de agregar una segunda consulta como cuando query_posts () se usa en un tema archivo.

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

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');
kevtrout
fuente
Yo uso esta función en mi propio sitio. Fue fácil cortarlo y pegarlo aquí para ti.
kevtrout
0

puede hacer un bucle personalizado usando query_posts y especificar el número de publicaciones por is_home, is_archive, etc.

solo una simple declaración if junto con query_posts

chrismccoy
fuente
Sí, lo mencioné en mi pregunta. Estoy buscando una manera de hacerlo para no tener que editar varios archivos de temas para cambiar la configuración. Gracias.
Doug
1
Es una idea bastante mala hacerlo de esta manera. WordPress ya ejecuta la consulta. Si coloca query_postssu tema, ignorará la consulta original y realizará otra redundante.
Krzysiek Dróżdż
-1

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

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>
glazsasha
fuente
-1

Me doy cuenta de que podría hacer esto editando los archivos de 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 integridad, descubrí que query_postscombinado con la $query_stringconcatenación 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 estoy mostrando publicaciones completas, y una lista mucho más grande de publicaciones en todas partes (categorías, por fecha, etc.) donde solo estoy mostrando resúmenes de publicaciones.

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

Jeff Atwood
fuente
Jeff, estaba buscando un lugar centralizado para controlar la cantidad de publicaciones devueltas en diferentes contextos. Su respuesta solo lo hace si usa index.php para manejar TODOS los contextos, lo que la mayoría de los temas no hacen. Además de aumentar las llamadas a la base de datos (lo que afecta el rendimiento), su técnica también puede cambiar la respuesta a etiquetas condicionales (por ejemplo, is_home () o is_front_page) de maneras inesperadas. Finalmente, si desea agregar bucles secundarios a una página, NO debe usar query_posts, sino usar "new WP_Query" (o get_posts).
Doug
@doug este no es un ciclo secundario, está anulando el ciclo principal, y sí, este tema en particular usa index.php para representar todo, es bastante minimalista. Sentí que esto tenía más sentido aquí como respuesta, pero si lo desea, puedo hacer mi propia pregunta y responderla si esta respuesta lo ofende de alguna manera.
Jeff Atwood
En realidad, leí mal su 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, por lo que mi última oración anterior era irrelevante. Y sí, es perfectamente legítimo poner todo su código en index.php si lo desea. Y si ese es el caso, entonces su método es una forma rápida y fácil de hacer esto, por lo 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 usted, yo y el WP Codex).
Doug