web-dev-qa-db-ja.com

posts_nav_link();静的ページに表示されない

私は2つの異なるループを持っています。ホームページのデフォルトですが、アーカイブページの2次ループです。以下のように、すべてのコンテンツを取得します。

<?php // WP_Query arguments
$args = array (
    'posts_per_page'         => '3'
);
// The Query
$archiveQuery = new WP_Query( $args );

// The Loop
if ( $archiveQuery->have_posts() ) {
    while ( $archiveQuery->have_posts() ) {
        $archiveQuery->the_post(); ?>
        <div class="post">
<a href="<?php the_permalink() ?>">
    <?php  first_item(); ?> </a>

しかし、posts_nav_link();を含めると、表示されません。これは静的ページだからでしょうか。私はこれを無限スクロールに使っています。

2
tmyie

WP_Queryで作成されたループの最後に、wp_reset_postdata()を必ず含めてください。

二次クエリの後にメインクエリループのグローバル$ post変数を復元するにはwp_reset_postdata()を使用してください。 https://codex.wordpress.org/Function_Reference/wp_reset_postdata

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';

    /* Restore original Post Data */
    wp_reset_postdata();

} else {
    // no posts found
}
1
signal2013

posts_nav_link はアーカイブページ用です。その関数はget_next_posts_nav_link which を使用していますglobal変数$wp_query!is_singular()のチェックがあります。 $wp_queryはあなたが作成したクエリではなくページ(単一)を表すので、それはあなたの "静的"ページでは常にfalseになります。それで、はい、それは静的なページだからです。

Chip Bennettは、ページネーションを動作させる方法を説明する、 というかなり徹底的な答えを書いた/まとめました

1
s_ha_dum