web-dev-qa-db-ja.com

カスタム投稿タイプテンプレートのquery_postsを使用したページ付け

私はここに千のページネーション問題についての質問があることを知っています、そして私はそれらを見ました、しかし私は私のところで何が悪くなっているのか理解することができないようです。これはカスタム投稿タイプのアーカイブテンプレートのループですが、ブログとして使用しているのでALL POSTSと呼ぶ必要があります。テンプレートの一番上には、特定のページに対するクエリがありますが、それが問題の原因となっているとは思われません。

何が起こるかというと、2ページ目に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ありがとう、pre_get-postsは完璧に機能しているようです。私は以前、私の選択がwp_queryとquery_postsの間にあると考えていたことを見逃していました。

下記は、 "rg_blog"カスタム投稿タイプアーカイブのクエリを変更するだけのはずです。

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