質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2195閲覧

WordPress(PHP) 新着記事の一覧が1ページ目の無限ループになってしまう

fugavc

総合スコア14

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/02/17 11:19

WordPressで新着記事の一覧を正常に表示したい

WordPressで自作のテーマで自分では解決できない問題が発生しています。

新着記事の一覧が正常に表示されない

jquery.autopagerで新着記事を「もっと見る」形式で表示させていますが。ページネーションでいういわゆる2ページ目以降の記事が1ページ目と同じ記事が表示され1ページ目の無限ループが生じています。 サイトURLは https://www.journase.waows.com/新着記事/ です。 なお、scriptの部分をdiv要素で囲っているのはscriptが正常に動作しない場合の対策です。 また、ほかのカテゴリー別の記事一覧(index.php)は正常に表示されています。

ソースコード

php

1 <?php query_posts('posts_per_page=10'); ?> 2 <?php if(have_posts()): while(have_posts()): the_post(); ?> 3 <div class="card mb-3"> 4 <div class="card-contents"> 5 <div class="row"> 6 <div class="col-lg-3"> 7 <?php if ( has_post_thumbnail($post_object->ID)): ?> 8 <?php 9 $thumbnail_id = get_post_thumbnail_id($post_object->ID); 10 $image = wp_get_attachment_image_src( $thumbnail_id, 'medium' ); 11 $src = $image[0]; 12 $width = $image[1]; 13 $height = $image[2]; 14 echo '<img class="card-img-top" src="'.$src.'" width="'.$width.'" height="'.$height.'" />'; 15 ?> 16 <?php endif; ?> 17 </div> 18 <div class="col-lg-9 ml-3 ml-lg-0 mr-3 mr-lg-0 my-3"> 19 <p class="font-weight-light d-inline-block mb-2 text-primary"> 20 <i class="fa fa-tag"></i> 21 <?php $cat = get_the_category(); ?> 22 <?php $cat = $cat[0]; ?> 23 <?php echo get_cat_name($cat->term_id); ?> 24 </p> 25 <h4 class="card-title"> 26 <strong> 27 <?php echo mb_strimwidth(get_the_title(), 0, 70, "…", "UTF-8"); ?> 28 </strong> 29 </h4> 30 <p class="card-text text-muted"> 31 <i class="fa fa-clock-o"></i> 32 <?php the_time( 'Y/m/d H:i' ); ?> 33 </p> 34 35 <a href="<?php the_permalink(); ?>" class="btn btn-outline-secondary">記事を読む</a> 36 </div> 37 </div> 38 </div> 39 </div> 40 <?php endwhile; endif; ?> 41 <?php if ( $wp_query->found_posts >10 ): ?> 42 <div id="next" class="mt-4"> 43 <a href="<?php echo next_posts(0, false); ?>"> 44 <button type="button" class="btn btn-outline-secondary">もっと見る</button> 45 </a> 46 <img id="loading" src="<?php echo get_template_directory_uri() ?>/jquery.autopager-1.0.0/ajax-loader.gif" width="31" height="31"> 47 </div> 48 <?php endif; ?> 49 <div> 50 <script> 51 var maxpage = <?php echo $wp_query->max_num_pages; ?>; 52 53 $('#loading').css('display', 'none'); 54 $.autopager({ 55 content: '.card', 56 link: '#next a', 57 autoLoad: false, 58 59 start: function(current, next) { 60 $('#loading').css('display', 'block'); 61 $('#next a').css('display', 'none'); 62 }, 63 64 load: function(current, next) { 65 $('#loading').css('display', 'none'); 66 $('#next a').css('display', 'block'); 67 if (current.page >= maxpage) { 68 $('#next a').hide(); 69 } 70 } 71 }); 72 73 $('#next a').click(function() { 74 $.autopager('load'); 75 return false; 76 }); 77 </script> 78 </div>

最後に

<?php query_posts('posts_per_page=10'); ?>の部分が無限ループを引き起こしていると考えていますが正しい表示方法がわかりません。

解決策をよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

get_query_var('paged')で、いま何ページ目かを取得し、
offsetでずらせばいけるかと。

php

1$posts_par_page = 10; 2 3$strQuery = 'posts_per_page='.$posts_par_page; 4 5$paged = get_query_var('paged'); 6if($paged > 1){ 7 $strQuery .= '&offset='.(($paged-1) * $posts_par_page); 8} 9query_posts($strQuery);

あとひとつ確認ですが、

html

1 <a href="<?php echo next_posts(0, false); ?>"> 2 <button type="button" class="btn btn-outline-secondary">もっと見る</button> 3 </a> 4

ここのリンク先は、正しく次のページにリンク貼られていますか?

投稿2018/02/17 11:56

編集2018/02/17 12:02
kszk311

総合スコア3404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fugavc

2018/02/17 12:26

ありがとうございます。 おかげさまで問題が解決しました。 正常に新着記事がループされています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問