• 解決済 momozo

    (@momozo)


    WordPress初心者です。あまりphpに詳しくありません。
    テーマはPinbordを使用しています。

    トップページの最新記事の表示件数のみ、指定したいので、
    見よう見まねでテーマのIndex.phpに
    <?php if (is_home()) query_posts(‘showposts=8’);?>
    を、
    <?php if( have_posts() ) : ?>
    の上に入れてみました。

    表示件数は、8件になったのですが、スクロールして一番下まで行くと、
    「Read All Articles→」という表示が出て、
    同じ8件の記事を表示してしまいます。
    さらに、スクロールするとまた追加され、
    同じ8件の記事が3つ表示されてしまいます。

    上記コードを入れた箇所の下のコードは以下の通りです。

    <div class="entries">
    <?php while( have_posts() ) : the_post(); ?>
    <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>
    </div><!-- .entries -->

    何処をどのようにしたら、繰り返されないようになるのか、
    教えていただけると助かります。
    どうぞよろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こちらのWebサイトが参考になると思います。
    query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】

    すみません、こっちの方が使いやすいサンプルを載せて下さっています。
    WordPressでページ送りが動かないのはどう考えてもquery_postsが悪い!【pre_get_posts、WordPressループまとめ】

    トピック投稿者 momozo

    (@momozo)

    ありがとうございました。

    functions.phpに、参照サイトのコードを追加しました。
    件数表示は指定通りになるのですが、
    やはり、繰り返されてしまいます。
    また、index.phpのquery_postsの部分と思われる所を削除すると、
    表示崩れが起きてしまいます。

    よく見ると、更に下のコード

    <?php pinboard_posts_nav(); ?>
    <?php else : ?>
    <?php pinboard_404(); ?>
    <?php endif; ?>
    </section><!-- #content -->

    に、navという箇所があり、
    試しに
    <?php pinboard_posts_nav(); ?>
    部分を削除したら、くり返し表示されなくなりました。

    結局、index.phpのquery_postsの部分と思われる所は削除せず、
    functions.phpに、pre_get_postsを追加しました。

    以上、自己解決いたしました。
    ありがとうございました。

    momozoさん、解決してよかったですね。
    参考に教えて頂きたいのですが、最終的には

    • index.php に何も追加せず、pinboard_posts_nav() の呼び出しを削除せず、functions.php に pre_get_posts の呼び出しを追加したのみ

    という方法でしょうか。

    トピック投稿者 momozo

    (@momozo)

    おかげさまでありがとうございました。

    最終的には、
    ●Index.phpは、pinboard_posts_nav() の呼び出しを削除、参照サイトにあったquery_postsの部分と思われる所(<?php if( have_posts() ) : ?>以降)はそのまま削除しませんでした。(表示崩れするため)

    <div id="container">
    <section id="content" <?php pinboard_content_class(); ?>>
    <?php if( is_category( pinboard_get_option( 'portfolio_cat' ) ) || ( is_category() && cat_is_ancestor_of( pinboard_get_option( 'portfolio_cat' ), get_queried_object() ) ) ) : ?>
    <?php pinboard_category_filter( pinboard_get_option( 'portfolio_cat' ) ); ?>
    <?php endif; ?>
    
    <?php if( have_posts() ) : ?>
    <div class="entries">
    <?php while( have_posts() ) : the_post(); ?>
    <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>
    </div><!-- .entries -->
    <!-- MORE READじゃないかと思われるので削除-->
     <!-- <?php pinboard_posts_nav(); ?> -->
    <?php else : ?>
    <?php pinboard_404(); ?>
    <?php endif; ?>
    </section><!-- #content -->

    ●functions.php に pre_get_posts の呼び出しを追加しました。

    ただし、実際のところ、functions.php に追記しなくても、最初のindex.phpへの query_postsの追加でも、pinboard_posts_nav() の呼び出しを削除すれば、結果は同じでした。
    また、次のページへ送るナビを削除してしまったようなので、指定数以上の表示件数になった場合、次のページには行けません。ただし、私のサイトでは問題ないので、そのままにしています。

    なにぶん、phpの仕組みがよくわかってないので、手探りでたまたまうまくいった感がありますが、色々参考になりました。ありがとうございます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「トップページの掲載記事数を指定をしたら、繰り返し表示してしまう」には新たに返信することはできません。