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

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

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

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

PHP

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

Q&A

解決済

1回答

1549閲覧

ワードプレスでのページネーション機能の実装について

php_shosinsha

総合スコア15

WordPress

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

PHP

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

0グッド

1クリップ

投稿2017/05/12 00:51

編集2017/05/15 05:06

現在トップページに写真を呼び出すようにPHPで構築してあります。
その中で40枚ある写真(今後も増加予定)を30枚出たところで区切り、ページングさせたいと思っています。

しかし、下記コードでは30枚目ではなく26枚目で区切られてしまい、
残りの14枚も次のページには表示されず、1枚目と同じ26枚が表示されています。

また、 'posts_per_page'=>100 にして全写真を1枚目に表示させても
ページ件数が必ず“ 1 2 3 次へ ”と3ページ表示されます。
その場合も次ページには1枚目と同じ写真が表示されています。

※修正後、写真が繰り返されるのはなくなりましたが、次はページ数が多くなってしまうようになりました。
例えば、2ページが正しい枚数のところ3ページあるように表示されてしまい、3ページ目には写真がないことをあらわすエラーが出てきます。

コードで直すべきところがありましたら、ご教授ください。
参考にしたサイトはhttp://appakumaturi.hatenablog.com/entry/20110528/1306585716です。
よろしくお願い致します。

▼home.php

PHP

1 2<?php $reco_ob = new wp_query(array('cat'=>'2', 'posts_per_page'=>30, 'post_status'=>'publish','order'=>'DESC','orderby'=>'ID')); ?> 3<?php if ($reco_ob->have_posts()) : while ($reco_ob->have_posts()) : $reco_ob->the_post(); usces_the_item(); ?> 4<?php if (usces_is_skus()) : ?> 5 6(その他コード) 7 8<?php global $wp_rewrite; 9$paginate_base = get_pagenum_link(1); 10if(strpos($paginate_base, '?') || ! 11 $wp_rewrite->using_permalinks()){ 12 $paginate_format = ''; 13 $paginate_base = add_query_arg('paged','%#%'); 14} 15 else{ 16$paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') . user_trailingslashit('page/%#%/','paged');; 17$paginate_base .= '%_%'; 18} 19 echo paginate_links(array( 20 'base' => $paginate_base, 21 'format' => $paginate_format, 22 'total' => $wp_query->max_num_pages, 23 'mid_size' => 4, 24 'current' => ($paged ? $paged : 1), 25 'prev_text' => '«', 26 'next_text' => '»', 27)); ?> 28

▼functions.php

PHP

1 2<?php 3function my_paginate(){ 4 global $wp_query, $paged; 5 $p_base = get_pagenum_link(1); 6 $p_format = 'page/%#%'; 7 //?の有無確認、有る場合は場所を特定 8 if($word = strpos($p_base, '?')){ 9 //?がある場合(検索結果) 10 $p_base = get_option(home).(substr(get_option(home), -1 ,1) === '/' ? '' : '/') 11 .'%_%'.substr($p_base, $word); 12 } else{ 13 //?が無い場合(カテゴリ、タグ等) 14 $p_base .= (substr($p_base, -1 ,1) === '/' ? '' : '/') .'%_%'; 15 } 16 echo paginate_links(array( 17 'base' => $p_base, 18 'format' => $p_format, 19 'total' => $wp_query->max_num_pages, 20 'current' => ($paged ? $paged : 1), 21 )); 22} 23?> 24

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

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

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

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

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

igaiga

2017/05/12 04:45

$pagedって値入ってますか?($paged ? $paged : 1)で値がないから1が入っている状態じゃないですかね?
php_shosinsha

2017/05/15 04:52

functions.phpにいれていた($paged ? $paged : 1)が機能していなかったようで、home.phpのコードを書き換えたところ、繰り返すバグはなくなりました。
php_shosinsha

2017/05/15 04:54

ただなぜかページ数が多くなっており、2ページでいいところが3ページになっていたりします。
guest

回答1

0

ベストアンサー

  1. new wp_query の引数がページングを考慮していない
  2. my_paginate$reco_ob ではなくメインクエリを基準としてページングをしようとしている

なのでページテンプレート上で new wp_query せずに、functions.php上で pre_get_posts 使った書き方に書き直すほうが良いと思います。

【【wordpress】pre_get_postsを使ってみませんか? - Qiita】
http://qiita.com/ruka/items/e14280d34eddf49efad1

【[Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works】
https://emiac-works.com/coding/pre-get-posts-code-snipet/

投稿2017/05/14 16:17

kei344

総合スコア69398

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

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

kei344

2017/05/15 05:13

あー、質問本文が書き換わった、と思ったらこのままの回答で問題なかった。
php_shosinsha

2017/05/15 05:43

本文書き換え後に回答に気づき、今書き換え挑戦中です。
php_shosinsha

2017/05/15 08:14

ひとつ質問なのですが、とあるページでは30枚表示、また別のカテゴリーでは15枚というような場合もfunctions.phpに書いた方が良いでしょうか?
kei344

2017/05/15 08:35

> とあるページでは30枚表示、また別のカテゴリーでは15枚というような場合もfunctions.phpに書いた方が良いでしょうか? そうですね。pre_get_postsフックで実行する関数内でカテゴリなどの分岐が出来るので、まとめて書くことも可能です。
php_shosinsha

2017/05/16 05:58

ありがとうございます!無事に解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問