web-dev-qa-db-ja.com

静的ページのカスタムクエリでアーカイブインデックスのページ付けを投稿する

WordPressでは、私が作成した特定のページテンプレートを使用しているNews用のページがあります。このページには、ニュースカテゴリに割り当てられたニュース投稿が表示されます。ユーザーがもっとニュースを読みたいのであれば、このページに最新のニュース記事を2つだけ表示し、下部に「前へ/次へ」リンクを追加する必要があります。ただし、次/前のリンクは機能していません。それらをクリックすると/ page/2に行きますが、同じ投稿が表示されます。これが私のコードです。

<div id="primary">
<div id="content" role="main">
            <div id="news">
    <?php query_posts( "category_name=news&orderby=date&order=ASC&posts_per_page=2" ); ?>
                <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
                    <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
                    <p class="post-date">Posted on <?php the_date(); ?>
                    <?php the_excerpt(); ?>
                <?php endwhile; ?>
                <?php endif; ?>

                <div id="more-posts">
                    <div class="previous-link"><?php previous_posts_link("< previous news") ?></div><div class="next-link"><?php next_posts_link ("more news >") ?></div>
                </div>
             </div>
    </div><!-- #content -->
    </div><!-- #primary -->
1
IntricatePixels

このようなカスタムクエリを実行するときは、ページ付けを正しく機能させるために少し「ハック」する必要があります。

これを変更してください。

<?php 
query_posts( "category_name=news&orderby=date&order=ASC&posts_per_page=2" ); 
?>

... WP_Query呼び出しに対して:

<?php 
$news_query = new WP_Query( "category_name=news&orderby=date&order=ASC&posts_per_page=2" ); 
?>

そして、あなたは*あなたのカスタムクエリオブジェクトを$wp_query global`に移動する必要があります。

// Move $wp_query into a temp holder
$temp = $wp_query;
// Nullify the global object
$wp_query = null;
// Now move your custom query into the 
$wp_query = $news_query;

次に、これからループの開始を更新します。

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

...これに:

<?php if ( $news_query->have_posts() ) : while ( $news_query->have_posts() ) : $news_query->the_post(); ?>

これにより、ページ付けが期待どおりに機能します。

ループを閉じると、

<?php endwhile; ?>
<?php endif; ?>

...元の$wp_queryグローバルを復元するだけです。

<?php endwhile; ?>
<?php endif; ?>
<?php $wp_query = $temp; ?>

そして、あなたは行ってもいいはずです。

0
Chip Bennett