web-dev-qa-db-fra.com

Définition des publications par page dans query_posts

Ours avec moi ici ..

La valeur par défaut des publications par page dans la zone d'administration est 10. Lors de certains tests, je souhaitais modifier le nombre de publications par page de mon archive de publications personnalisées sur 2 (dans WP 3.1).

Le problème est que je n'ai que 4 articles, donc il devrait y avoir 2 pages avec 2 articles sur chaque, mais comme la valeur par défaut est 10, aller à/page/2 renvoie l'erreur-404 (en supposant que, avec 10 articles par page, il ne s pas une deuxième page)

La seule façon de contourner cela était de définir la valeur par défaut dans la zone d'administration sur 1, mais ce n'est pas vraiment idéal car je dois maintenant créer un query_post personnalisé pour toutes les archives de type publication afin de définir les publications par page.

Quelqu'un a-t-il une meilleure façon de faire cela ou des idées? Merci.

archive-project.php:

<?php get_header(); ?>

    <?php
        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('Previous work', '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> Older posts', 'twentyten' ) ); ?></div>
            <div class="nav-next"><?php previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>', 'twentyten' ) ); ?></div>
        </div>
    <?php endif; ?>

<?php get_footer(); ?>

enregistrer le type de poste:

register_post_type('project', array(
    'capability_type' => 'post',
    'has_archive' => true,
    'hierarchical' => false,
    'labels' => array(
        'name' => __('Projects', 'fullycharged'),
        'singular_name' => __('Project', 'fullycharged'),
        'all_items' => __('All Projects', 'fullycharged'),
        'add_new_item' => __('Add New Project', 'fullycharged'),
        'edit_item' => __('Edit Project', 'fullycharged'),
        'update_item' => __('Update Project', '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')
));
1
Andrew Lawson

Il existe une discussion sur les forums d'assistance de Wordpress.org à propos de ce problème précis. Le PO sur cette discussion a trouvé une réponse mais n'a pas encore posté.

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

Merci pour votre aide quand même.

1
Andrew Lawson

Voici ce que j'utilise habituellement avec l'action pre_get_posts pour modifier une valeur de requête unique pour une page de taxonomie ou de catégorie:

/**
 * Control the number of search results
 */
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' );
2
Kevin Leary