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

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

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

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

PHP

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

Q&A

解決済

2回答

327閲覧

WordPress(WP_Query)のページ数について

tak026

総合スコア5

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/05/17 18:30

実現したいこと

GETパラメータで条件分岐を行い、ページングのページ数が
20件であれば、1ページ当たり10表示するのであれば 2まで表示させたいと
考えています。
基本的な事で大変申し訳ないのですが、教えて頂けますと幸いです。
既出でしたら、申し訳ないですがURLを教えて頂けますか。

発生している問題

WordPressでページングの機能を実装しており
GETパラメータで条件分岐を行い、検索結果自体は問題無いように
見えるのですが、総ページ数が可変にならず、20件しかないとして
posts_per_pageで10とする場合、2ページのみが表示されれば良いのですが
ページ数の値が2以上(固定で最初に取得したページ数)となってしまいました。

該当のソースコード

php

1/* 2 * $args_01 はGETパラメータが01の時の条件とし 3 * $args_02 はそうでない場合で条件を記載済みとなります。 4 */ 5if (isset($_GET['param']) && $_GET['param'] == '01') { 6 $query = new WP_Query($args_01); 7} else { 8 $query = new WP_Query($args_02); 9} 10// ループ処理はifで判定した後、ループ処理としています。 11while ($query->have_posts()) : $query->the_post(); 12endwhile; 13 14the_posts_pagination(array( 15 'prev_text' => '<', 16 'next_text' => '>', 17));

試したこと

タブクリック時のGETパラメータを変更し、public_query_varsに追加し
そのパラメータを使用する、?meta_key=xxxとして表示されるかを確認.
meta_keyを指定して確認は出来たが、3つ以上切り替える際に、GETパラメータが
残ってしまったので、調査中とし確認中となります。

補足情報

あまりコードの方が書いていなく申し訳御座いませんが、詳しい方いらっしゃいましたら
ご教授頂ければ幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

テンプレート上で new WP_Query するより pre_get_posts でクエリ自体を書き換えるほうがナビゲーションの問題が出にくいです。

【pre_get_postsでメインクエリを制御する | Tips Note by TAM】
https://www.tam-tam.co.jp/tipsnote/cms/post9420.html

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

投稿2018/05/17 18:36

kei344

総合スコア69398

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

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

tak026

2018/05/18 00:42

pre_get_postsでメインクエリを書き換えるように設定することで ページ数が1度のクエリのみで実行可能かと思いますが、 GETパラメータでの条件を組む場合についてご質問なのですが、 if (!is_home() && $_GET['param'] == 'xxx') { // queryに条件を記述 query->set('cat', '1', '2'); } 上記のような使い方で宜しかったでしょうか? 初心者のような質問で大変申し訳ん御座いませんが、ご回答いただけますと幸いです。
tak026

2018/05/18 02:12

pre_get_postsで実行しましたら、難なくページ数が変更されました。 有難う御座います。
tak026

2018/05/18 04:46 編集

filter_input関数、とても勉強になります。 ページ数は変更されていたように見えたのですが、メインクエリの書き換えが失敗しているように見えたので、再度ご質問させて頂きます。勉強不足ですいません。 $category_id = array(); $param = filter_input( INPUT_GET, "xxxx" ); if ($query->is_home() && $param == 'param') { $category_id = get_category_by_slug($param); $category_id = $category_id->cat_ID; $query->set( 'cat', $category_id ); } 初心者で申し訳ないのですが、ご回答頂けないでしょうか。
kei344

2018/05/18 04:56

状況がわかりませんね。また、質問が表題と違うため別の質問を立てられることをお勧めします。 特定のカテゴリを指定することがわかっているなら $query->set( 'cat', $category_id );にカテゴリIDを直接入れて試されてはいかがでしょうか。 あとはトップページが固定ページを指定している場合は is_front_page() と言う可能性も有ります。 【is_home()とis_front_page()の違いって何? – 100arttoe】 http://www.arttoe.net/19
tak026

2018/05/18 05:23

色々と有難う御座います。 仰る通り、質問が表題と異なっているようですいません。 初めて利用したので、すいません。 別の表題に関しましては、別に書かせて頂きます。
guest

0

ご回答有難う御座います。
pre_get_postsでの方がよいとの事なので、実装を変更してみます。

投稿2018/05/17 23:50

tak026

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問