web-dev-qa-db-fra.com

Pagination sur avec query_posts dans un modèle de type d'article personnalisé

Je sais qu'il y a un millier de questions concernant la pagination, et je les ai examinées, mais je n'arrive pas à comprendre ce qui ne va pas avec le mien. Il s'agit d'une boucle sur un modèle d'archive de type publication personnalisé, mais elle devrait appeler TOUS LES POSTS, car je l'utilise en tant que blog. Tout en haut du modèle se trouve une requête pour une page spécifique, mais je ne pense pas que ce soit la cause du problème.

Qu'est-ce qui se passe est que sur la deuxième page je reçois une erreur 404.

<?php get_header(); ?>
<?php // query post #4606
$post_id = 4606;
$queried_post = get_post($post_id);
$title = $queried_post->post_title;?>
<?php echo $title;?>
<!-- The Actual Loop, with a count so that I can style the first post differently   -->
<?php $post = $posts[0]; $c=0;
$args = array(
    'post_type'=> 'post',
    'posts_per_page' => 7,
    'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1),
    );
query_posts($args);
while (have_posts()) : the_post();
?>
<!--Featured Post-->
<?php $c++;
if( !$paged && $c == 1) :?>
                <?php if ( has_post_thumbnail()) : ?>
                    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
                        <?php the_post_thumbnail('archive-featured-img', array('class' => 'aligncenter')); ?>
                    </a>
                <?php endif; ?>
                <!--the title and content etc.-->
<!--Other Posts-->
<?php else :?>           
                 <!--the title and content for all other posts-->         
<?php endif;?>
<?php endwhile; ?>
<!-- The end of the loop   -->
<!--Page Navigation-->
<?php if (  $wp_query->max_num_pages > 1 ) : ?>
                <div id="post-nav" class="cf">
<div class="nav-previous"><?php next_posts_link('Next Page &#187;', 0); ?></div>
<div class="nav-next"><?php previous_posts_link('&#171; Previous Page', 0); ?></div>
                </div>
<?php endif; ?>
<?php
wp_reset_query();  // Restore global post data
?>

        <!--SIDEBAR--repeats the page title from above, then dynamic sidebar-->      
                <h1><?php echo $title;?></h1>
                <?php echo $queried_post->post_content;?>

            <?php dynamic_sidebar( 'Main Blog Page Sidebar' ); ?>

<?php get_footer() ?>
1
Josh M

@Milo Merci, les pre_get-posts semblent fonctionner parfaitement. Cela me manquait avant, pensais que mes choix allaient entre wp_query et query_posts.

Ce qui suit ne devrait modifier que la requête sur l'archive de type de message personnalisé "rg_blog", n'est-ce pas?

function blog_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_post_type_archive('rg_blog')) {
      $query->set('post_type', 'post');
    }
  }
}
add_action('pre_get_posts','blog_filter');
1
Josh M