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

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

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

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

PHP

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

Q&A

1回答

1015閲覧

絞り込み条件によって、WP_Queryが冗長になってしまう問題について

makirons

総合スコア20

WordPress

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

PHP

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

0グッド

1クリップ

投稿2018/12/06 11:40

編集2018/12/06 12:04

teratailさんのように、「マイタグで絞り込み」などの条件を設置したいのですが、その際にWP_Queryが冗長になってしまうのを避けたいです。

###実現したいこと
Cookieに保存された絞り込み条件「$_COOKIE["refine"] )」から、表示記事の条件「WP_Query( $args )」を生成したいです。

しかし絞り込み条件に「マイタグ」「執筆者」などがあると、PHPが冗長になってしまいそうで困っています。

具体的には、該当のソースコードにあるように
// ➀マイタグで絞り込む場合
// ➁執筆者で絞り込む場合
// ➂マイタグと執筆者で絞り込む場合
という3つのパターンそれぞれのWP_Query( $args )を作らなければならないのか?と思っておりまして、この点の冗長さを避けたいです。

###該当のソースコード

php

1<!-- 新着記事一覧 --> 2<section class="RelatedPost"> 3 4 <?php 5 6 /* 7 * 絞り込みの条件を$refineへ 8 */ 9 $refine = $_COOKIE["refine"] ); 10 11 /* 12 * 表示記事の条件を$argsへ 13 */ 14 15 // ➀マイタグで絞り込む場合 16 if(preg_match('/マイタグ/',$refine)){ 17 $args = array( 18 // 新着記事の条件 19 'orderby' => 'date', 20 // マイタグの条件 21 'tax_query' => array( 22 array( 23 'taxonomy' => 'tag', 24 'field' => 'slug', // IDのときはterm_id 25 'terms' => explode(",", $mytag), 26 ), 27 ), 28 ); 29 } 30 31 // ➁執筆者で絞り込む場合 32 if(preg_match('/執筆者/',$refine)){ 33 $args = array( 34 // 新着記事の条件 35 'orderby' => 'date', 36 // 執筆者の条件 37 'author' => $authoe, 38 ); 39 } 40 41 // ➂マイタグと執筆者で絞り込む場合 42 if(preg_match('/マイタグ,執筆者/',$refine)){ 43 $args = array( 44 // 新着記事の条件 45 'orderby' => 'date', 46 // マイタグの条件 47 'tax_query' => array( 48 array( 49 'taxonomy' => 'tag', 50 'field' => 'slug', // IDのときはterm_id 51 'terms' => explode(",", $mytag), 52 ), 53 ), 54 // 執筆者の条件 55 'author' => $authoe, 56 ); 57 } 58 59 $the_query = new WP_Query( $args ); 60 ?> 61 62 <!-- ループあれこれ書く --> 63 64</section> 65 66<!--コメント数記事一覧 --> 67<section> 68ここには上の 69// 新着記事の条件 70'orderby' => 'date', 7172// コメント数の条件 73'orderby' => 'comment_count', 74にしただけで他が同じソースコードを書く? 75</section>

さらにソースコードの最後にあるように、<!-- 新着記事一覧 -->だけでなく<!--コメント数記事一覧 -->なども追加する予定なのですが、そうなるとその都度➀➁➂の条件を書かないといけないのか?と思っておりまして、どうしたものかと途方に暮れています。

この辺りをなんとかスッキリとさせるためにはどのようなコードがベストでしょうか?

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

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

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

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

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

guest

回答1

0

配列に値を追加していきゃいいんじゃないでしょうか

php

1$refine_arr=explode(',',$_COOKIE['refine']); 2 3$args=[]; 4 5if(新着順の条件){$args['orderby']='date';} 6elseif(コメント数順の条件){$args['orderby']='comment_count';} 7 8if(in_array('マイタグ', $refine_arr,true)){ 9 $args['tax_query']=[ 10 ['taxonomy' => 'tag','field'=>'slug','terms'=>explode(',',$mytag)] 11 ]; 12} 13if(in_array('執筆者', $refine_arr,true)){ 14 $args['author']=$author; 15} 16$the_query = new WP_Query( $args );

ついでにpreg_match('/マイタグ,執筆者/',$refine)という判定条件は危うく感じます
ここはたとえ値の順番が入れ替わっても引っかかるようにしたいはずですし
将来的に条件が増えて間に別の値が入ってきたとしても同じく引っかかるようにしたいはずです

投稿2018/12/06 16:34

KazuhiroHatano

総合スコア7804

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

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

makirons

2018/12/06 18:48 編集

どうもありがとうございます。追加すれば良さそうかも、とは思い至ったのですが具体的な方法がわからず、それについて別の質問をしたりしていました。(あちらにもご回答感謝です。) 判定条件についてもご指導誠にありがうございます。 なるほど「preg_match」でなく「in_array」を使うために「explode」をかけたのですね。
makirons

2018/12/06 18:49 編集

すみません、大変恐縮ですが、簡略化した下記でも何も表示されないのですが、何か…、、お間違いではございませんでしょうか?すみません。 <?php $args=[]; $args['orderby']='date'; ); $the_query = new WP_Query( $args ); ?>
papinianus

2018/12/07 00:07

ほんとに↑書いてるなら ); が構文エラー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問