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

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

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

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

PHP

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

Q&A

解決済

1回答

1412閲覧

「ワードプレス」カスタムフィールドによる投稿の絞り込みについて

alitomo

総合スコア41

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/02/14 07:32

編集2018/02/16 07:31

・ユーザーと投稿にはそれぞれカスタムフィールドが2つ登録されている。
・そのカスタムフィールドには配列で値が複数入っている。※セレクトボックスにより選択した値である。

項目:food
選択肢:'cake','manjyu','steak','barger'
項目:drink
選択肢:'coffee','coke','water','tea'

・ユーザーと投稿に登録されているセレクトボックスの種類と項目は1対1である。
・表示されたページでログインしているユーザー情報を確認して、投稿の出し分けをしたい。

上記の状態でログインしているユーザーのカスタムフィールドに保存された値がfoodのsteakとcakeだった場合に
-->
foodのsteakとcakeが登録された投稿とfood又はdrinkの値が空の投稿を表示するにはどのようなquery_postsを発行したら良いでしょうか?

2/16追記
aozukiさん、お返事遅くなりすいません。
頂いた内容で色々試してみたのですが、何故か上手く行きません。。。。

'meta_query'を指定すると、カスタムフィールドが登録されていない投稿が弾かれてしまうんですよね。
しかも'compare'の値がlikeだとヒットするのにINだとヒットしないとか。。。完全にハマってしまいました。_| ̄|○ il||li

イメージ説明

画像の内容で

'meta_query' => array( 'relation' => 'AND', array( 'key' => 'posFil-1', 'value' => array('alitomo'), 'compare' => 'IN', ), ) ); query_posts( $args );

とすると何も表示されず、

'compare' => 'LIKE',

とすると364だけじゃなく、438、442も取得してしまいます。
いったいどうなっているのか困惑しています。

しかも'meta_query'がセットされていない投稿はヒットしないし。
どうぞよろしくお願いします。

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

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

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

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

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

kei344

2018/02/14 09:50

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
alitomo

2018/02/15 07:49

そうですね。アドバイスありがとうございます。(_ _)質問のしかたをもう少し見直します。
guest

回答1

0

ベストアンサー

  1. wp_get_current_user()で現在のユーザーを取得
  2. get_user_meta()にユーザーIDとフィールドのkey名を指定し、ユーザー側のフィールドの値を取ってくる
  3. get_posts()のパラメータmeta_queryに取ってきた値を入れる

(事前に配列を組み立てておけば楽)

流れはこれだけですよね。
各関数の使い方を調べて(関数名でググれば大体出ます)自身でコードを書いてみてください。
meta_queryは最終的に下記のような形になっていれば大丈夫でしょう

$args = array( 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'food', 'value' => 'steak', 'compare' => '=', ), array( 'key' => 'food', 'value' => 'cake', 'compare' => '=', ), ), ); $myposts = get_posts($args);

参考:query_posts(WP_Queryクラス)でカスタムフィールドを使う


【追記】

↑これでfoodがsteakかcakeか空でdrinkが空の投稿が取得出来ますでしょうか?逆に言えば'manjyu'と'barger'以外の投稿全てが取得出来ますでしょうか?

こういうことですかね?
compareにINを指定すればvalue(配列)のいずれかが一致する投稿を取得します。

PHP

1'meta_query' => array( 2 'relation' => 'AND', 3 array( 4 'key' => 'food', 5 'value' => array('', 'steak', 'cake'), 6 'compare' => 'IN', 7 ), 8 array( 9 'key' => 'drink', 10 'value' => array(''), 11 'compare' => 'IN', 12 ), 13),

これならforeach使うまでもなく、get_user_metaで取ってきた値をそのままvalueに突っ込むだけです。

$foods = get_user_meta($user->ID, 'food'); $foods['food'][] = ''; 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'food', 'value' => $foods['food'], //以下略

投稿2018/02/15 03:47

編集2018/02/15 05:39
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

alitomo

2018/02/15 05:00 編集

aozukiさん、いつもありがとうございます。 上記コードの悩みなんですが、投稿のfoodに何も情報が付与されていない投稿が拾えないところなのです。 food又はdrinkの値が空の投稿を表示するのは・・・・ $args = array( 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'food', 'value' => 'steak', 'compare' => '=', ), array( 'key' => 'food', 'value' => 'cake', 'compare' => '=', ), array( 'key' => 'food', 'value' => '', 'compare' => '=', ), ), ); ↑これでfoodがsteakかcakeか空でdrinkが空の投稿が取得出来ますでしょうか?逆に言えば'manjyu'と'barger'以外の投稿全てが取得出来ますでしょうか? あと >get_posts()のパラメータmeta_queryに取ってきた値を入れる >(事前に配列を組み立てておけば楽) の部分ですが、配列の処理が苦手なので、 array( 'key' => 'food', 'value' => 'cake', 'compare' => '=', ), の部分をforeachなので回しながら追加していくんでしょうが、 イマイチやり方が分かっていません。 ご教授のほどどうぞよろしくお願いします。(_ _)
退会済みユーザー

退会済みユーザー

2018/02/15 05:40

回答に追記しました(ちょっと仕様がいまいちわかってないかもしれませんが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問