Configurando posts por página en query_posts

8 feb 2011, 18:25:11
Vistas: 24.2K
Votos: 1

Tengan paciencia aquí...

El número predeterminado de posts por página en el área de administración es 10. Durante algunas pruebas quise cambiar los posts por página para mi archivo de posts personalizados a 2 (en WP 3.1).

El problema es que solo tengo 4 posts, así que debería haber 2 páginas con 2 posts en cada una, pero como el valor predeterminado es 10, al ir a /page/2 devuelve error-404 (suponiendo que con 10 posts por página no habría una segunda página)

La única forma de solucionar esto fue establecer el valor predeterminado en el área de administración a 1, pero no es realmente ideal ya que ahora tengo que hacer una query_post personalizada para todos los archivos de tipos de post para establecer los posts por página.

¿Alguien tiene una mejor manera de hacer esto, o alguna idea? Gracias.

archive-project.php:

<?php get_header(); ?>

    <?php
        // Consulta global para mostrar 2 posts por página
        global $wp_query;
        query_posts(array_merge($wp_query->query, array(
            'paged'          => get_query_var('paged'),
            'posts_per_page' => 2
        )));
    ?>

    <h1 class="title"><?php _e('Trabajos anteriores', 'fullycharged'); ?></h1>

    <?php if (have_posts()): while(have_posts()): the_post();?>
        <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>" <?php post_class('launch col col-' . $i); ?>>
            <span class="project-title"><?php the_title(); ?></span>
            <?php the_content(); ?>
        </a>
    <?php endwhile; endif; ?>

    <?php if ($wp_query->max_num_pages > 1): ?>
        <div id="nav-below" class="navigation">
            <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&larr;</span> Posts antiguos', 'twentyten' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( 'Posts nuevos <span class="meta-nav">&rarr;</span>', 'twentyten' ) ); ?></div>
        </div>
    <?php endif; ?>

<?php get_footer(); ?>

registrar tipo de post:

register_post_type('project', array(
    'capability_type' => 'post',
    'has_archive' => true,
    'hierarchical' => false,
    'labels' => array(
        'name' => __('Proyectos', 'fullycharged'),
        'singular_name' => __('Proyecto', 'fullycharged'),
        'all_items' => __('Todos los Proyectos', 'fullycharged'),
        'add_new_item' => __('Añadir Nuevo Proyecto', 'fullycharged'),
        'edit_item' => __('Editar Proyecto', 'fullycharged'),
        'update_item' => __('Actualizar Proyecto', 'fullycharged')
    ),
    'menu_icon' => get_stylesheet_directory_uri() . '/images/monitor-off.png',
    'menu_position' => 5,
    'public' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'rewrite'  => array('slug' => 'work', 'with_front' => false),
    'supports' => array('title', 'editor', 'thumbnail', 'custom-fields')
));
7
Comentarios

¿Puedo ver el código que estás usando? ¿Estás llamando a get_query_var( 'page' );?

designpx designpx
8 feb 2011 18:40:23

@Designpx

global $paged; query_posts(array_merge($wp_query->query, array( 'paged' => $paged, 'posts_per_page' => 2 ))); Esos son todos los cambios que he hecho a la consulta, no uso get_query_var( 'page' );, pero he usado la variable global $paged porque la paginación de archivos usa $paged en lugar de $page

Disculpa por el formato incorrecto

Andrew Lawson Andrew Lawson
8 feb 2011 19:14:33

@Andre Lawson, ¿Tienes una página normal y un tipo de entrada personalizado con el mismo slug? Por ejemplo, digamos que tienes una página llamada "Recetas" con el slug "/recetas" y luego tienes un tipo de entrada llamado "Recetas" donde la regla de reescritura está configurada como 'rewrite' => 'recetas'? Si es así, estás confundiendo a WordPress con tus enlaces

eileencodes eileencodes
8 feb 2011 20:26:46

No hay una página regular en /recipes, solo registré el custom post en el archivo functions.php.

Puedo obtener la primera página de mi archivo de recetas en /recipes, pero cuando cambio el posts_per_page en el archivo archive-recipes.php a un valor diferente al configurado en WP-Admin -> Settings -> Reading resulta en un error "la página 'n' no debería existir (cuando realmente debería, según mi posts_per_page modificado)".

No creo que sea mi código en archive-recipes.php porque colocar exit; al inicio del archivo no hace nada.

Andrew Lawson Andrew Lawson
8 feb 2011 20:41:15

@eileen @designpx En otras palabras, la solicitud a /recipes muestra la primera página del archivo, /recipes/page/2 no llega al archivo de plantilla archive-recipes.php porque la página 2 no debería existir, según la configuración en WP-Admin -> Settings -> Reading

Andrew Lawson Andrew Lawson
8 feb 2011 21:07:30

@Andrew Lawson - No sé cuál es el problema, la configuración en wp-admin no debería importar si posts_per_page y $paged están configurados. Intentaría cambiar 'paged' => $paged por 'paged' => get_query_var('paged') para ver si eso lo soluciona. De lo contrario, publicaría todo el código que tienes en archives-recipes.php

eileencodes eileencodes
8 feb 2011 21:21:00

@eileen get_query_var('paged') no hace ninguna diferencia, así que he añadido mi código a la pregunta original, pero no creo que ayude ya que la solicitud work/page/2 ni siquiera llega al archivo de plantilla

Andrew Lawson Andrew Lawson
8 feb 2011 21:36:31
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 2
3

Esto es lo que suelo usar con la acción pre_get_posts para cambiar un valor único de consulta para una página de taxonomía o categoría:

/**
 * Controlar el número de resultados de búsqueda
 */
function custom_posts_per_page( $query ) {
    if ( $query->is_tax('mytaxonomy') || $query->is_category('mycategory') ) {
        set_query_var('posts_per_page', 9);
    }
}
add_action( 'pre_get_posts', 'custom_posts_per_page' );
6 jul 2011 16:46:06
Comentarios

La documentación aquí http://codex.wordpress.org/Function_Reference/query_posts da la impresión de que puedes simplemente "actualizar" una variable de consulta usando la función query_posts(). Eso no funcionó para mí, pero tu ejemplo usando $wp_query->query_vars sí. ¿Alguna idea de por qué?

Niko Nyman Niko Nyman
8 sept 2011 11:15:53

Al agregar a las variables de consulta existentes no estamos reescribiendo nada. Esto es como decir: "Dame tus configuraciones, voy a cambiar un valor, luego las restableceré." antes de ejecutar la consulta.

Kevinleary.net Kevinleary.net
31 jul 2012 21:51:27

Solo me pregunto por qué query_posts() no parece funcionar de esa manera para permitir cambiar un valor, aunque la documentación lo indique.

Niko Nyman Niko Nyman
24 sept 2012 13:08:41
0

Hay una discusión en los foros de soporte de Wordpress.org sobre este problema exacto. El autor de la publicación en esa discusión ha encontrado una solución pero aún no la ha compartido.

http://wordpress.org/support/topic/error-404-on-pagination-when-changing-posts_per_page-on-query_posts

Gracias de todas formas por tu ayuda.

8 feb 2011 23:18:07