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

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

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

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

Q&A

解決済

2回答

11405閲覧

ページネーションがうまく動かない

raidomaru

総合スコア106

WordPress

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

0グッド

0クリップ

投稿2016/10/14 02:39

###前提・実現したいこと
wordpressでcategory-column.phpページを作っています。
1ページ5記事でページネーションを作りたいのですが、
2ページ目に行ってもURLは変わるのですが、表示される記事が1ページ目と変わりません。

1ページ目のURL
http://ドメイン名/category/column/
2ページ目のURL
http://ドメイン名/category/column/page/2/

よろしくお願いします。

###category_column.phpのループ部分

php

1 2 3<div id="child_column_linkbox"> 4 <?php 5 $args = array( 'posts_per_page' => 5, 'category' => 'column', 'order' => 'DESC'); 6 $myposts = get_posts($args); 7 foreach( $myposts as $post) : setup_postdata($post); ?> 8<div class="child_column_article"> 9<div class="child_column_article_left"> 10<?php the_post_thumbnail('full', array('class' => 'column_relative')); ?> 11<?php 12 $days = 7; 13 $today = date_i18n('U'); 14 $entry = get_the_time('U'); 15 $elapsed = date('U',($today - $entry)) / 86400; 16 if( $days > $elapsed ){ 17 echo "<img src=\"/wp-content/themes/useful/shared/images/ico_01.png\" class=\"child_column_absolute\">"; 18 } 19?> 20</div> 21<div class="child_column_article_right"> 22<time><?php the_time('Y/n/d'); ?></time> 23<h2><?php the_title();?></h2> 24<p><?php echo mb_substr(strip_tags($post-> post_content),0,40).'...'; ?></p> 25<div class="child_column_article_more"> 26<a href="<?php the_permalink();?>"> 27<img src="<?php echo get_template_directory_uri(); ?>/shared/images/btn_03.png" alt=""> 28</a> 29</div> 30</div> 31</div> 32 33<?php endforeach; wp_reset_postdata();?> 34 35</div>

###category.phpページネーション出力部分

php

1<ul id="column_number"> 2<?php wp_pagination(); ?> 3</ul>

###functions.phpページネーション設定

php

1function wp_pagination() { 2 global $wp_query; 3 $big = 99999999; 4 $page_format = paginate_links( array( 5// 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 6 'format' => '?paged=%#%', 7// 'current' => max( 1, get_query_var('paged') ), 8 'total' => $wp_query->max_num_pages, 9 'prev_next' => True, 10 'prev_text' => __(' '), 11 'next_text' => __(' '), 12 'type' => 'array' 13 ) ); 14 if( is_array($page_format) ) { 15 $paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var('paged'); 16 //echo '<li><span>'. $paged . ' of ' . $wp_query->max_num_pages .'</span></li>'; 17 foreach ( $page_format as $page ) { 18 echo "<li>$page</li>"; 19 } 20 } 21 wp_reset_query(); 22}

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

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

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

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

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

guest

回答2

0

ベストアンサー

以前と同じような回答で恐縮ですが、

PHP

1 <?php 2 $args = array( 'posts_per_page' => 5, 'category' => 'column', 'order' => 'DESC'); 3 $myposts = get_posts($args); 4 foreach( $myposts as $post) : setup_postdata($post); ?> 5 //ここにループするテンプレート 6<?php endforeach; wp_reset_postdata();?> 7```を 8```PHP 9<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 10 //ここにループするテンプレート 11<?php endwhile; endif; ?> 12```にしたらどうでしょう。 13 14category_column.php のテンプレートをWPが解釈する前に、`array( 'posts_per_page' => 3/*管理画面で設定した数値*/, 'category' => 'column', 'order' => 'DESC')` というような WP_Query が実行されています。そのため、`get_posts` で改めて取得する必要が無いと思われます。 15 16--- 17 18件数を変えたいだけであれば、(ループについて上記のようにしてから)下記のようにすれば変更可能だと思います。 19 20```PHP 21// functions.php 22function set_my_posts_page( $query ) { 23 if ( is_admin() || ! $query->is_main_query() ) { return; } 24 if ( $query->is_category( 'column' ) ) { //条件分岐 25 $query->set( 'posts_per_page', '5' ); //パラメーター設定 26 } 27} 28add_action( 'pre_get_posts', 'set_my_posts_page' );

【query_postsとそろそろお別れを。| Electric fruits blog】
http://www.electric-fruits.com/creator-blog/blog20140918/

投稿2016/10/15 07:30

kei344

総合スコア69398

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

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

raidomaru

2016/10/15 08:59

できました! 同じようなところでつまずいて申し訳ないです。
kei344

2016/10/15 09:14

> 同じようなところでつまずいて申し訳ないです。 そういうものなので、どんどんつまづいてください。上達にはつまづいたり引っかかったりすることが必要だと思います。 WPのテンプレートを編集する際には、基本的にクエリ(get_postsなど)を書かない位に考えておいたほうがいいと思います。その上で、「そのテンプレートで処理したほうがよい」と判断できるもののみ get_posts か WP_Query を使用すると良いと思います。
guest

0

/page/2/が含まれていると2ページ目の内容を表示するなど、
アクセスしたURLによって、WordPressが表示する内容を切り替えているのはご存知かと思います。

コードを拝見すると、その内容を上書きする記述が入っていました。
その為、いくらページを進んでも内容が変わらなくなってしまっています。

具体的には――

PHP

1<?php 2 $args = array( 'posts_per_page' => 5, 'category' => 'column', 'order' => 'DESC'); 3 $myposts = get_posts($args); 4 foreach( $myposts as $post) : setup_postdata($post); ?>

PHP

1<?php endforeach; wp_reset_postdata();?>

――の部分です。

簡単な解決方法としては、表示する内容を指定している$args =で始まる行の内容を次の様に修正します。

PHP

1 2//URLから今何ページ目を表示したいのか取得します 3$now_page = get_query_var('page'); 4 5//スキップする記事数を決めます。 6//1ページ目なら0、2ページ目から5件の記事をスキップして、 7//1ページ目なら1件目、2ページ目から6件目から表示できるようにします。 8$offset = ( $now_page - 1 ) * 5; 9 10//offset(スキップする記事数)に先ほど計算した$offsetを設定します。 11$args = array( 'posts_per_page' => 5, 'category' => 'column', 'order' => 'DESC', 'offset' => $offset );

ただ、そもそも今回の様なシチュエーションだとget_postsを使用する意味は無いように思います。
WordPressCodexのループの記事などもよかったら参考にされてください。

投稿2016/10/14 04:38

gzrita

総合スコア236

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

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

raidomaru

2016/10/14 04:57

ありがとうございます。 試してみたのですが、1ページあたりの記事がなぜか3つになってしまい、現在8記事投稿しているのですが、1ページ目と2ページ目のそれぞれに3つずつの6記事しか出力されません。
gzrita

2016/10/14 05:09

少し確かめてみます。 お伺いしたいのですが、今投稿されている記事が「A,B,C,D,E,F,G,H」の順番だとして、 1ページ目・2ページ目で表示されている記事はどの様な状態ですか? <例> 1ページ目:ABC 2ページ目:DEF や 1ページ目:ABC 2ページ目:ABC や 1ページ目:ABC 2ページ目:FGH など
raidomaru

2016/10/14 05:21 編集

Aを一番最新の記事とすると下記のようになります。 1ページ目:FGH 2ページ目:FGH カテゴリを絞り込まず、下記のループの場合はページネーションも正常に動きます。 foreachを使うとなぜかうまくいきません。 <?php if(have_posts()):while (have_posts()):the_post(); ?> //ループ内容 <?php endwhile; endif; ?>
gzrita

2016/10/14 06:03 編集

大変失礼しました。 $now_page = get_query_var('page'); を $now_page = get_query_var('paged'); に変更すると如何でしょうか。
raidomaru

2016/10/14 06:23

何度も、ありがとうございます。 直してみましたが、変わらないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問