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

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

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

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

Q&A

0回答

1085閲覧

WordPressのWP_Queryでの記事取得について

amegahutteruyo

総合スコア15

WordPress

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

1グッド

2クリップ

投稿2019/10/19 08:31

編集2022/01/12 10:55

###現状
WordPressのカスタムフィールドに配列を入れるときの質問です。

カスタムフィールドの値を検索対象とするため、serializeでなくjson_encodeで値を保存しています。
serializeすると、「ais」などが検索にひっかかってしまうためです。)

その保存と取得のために以下の関数を通しており、いずれも問題なく機能します。

// 保存 function my_update_post_meta( $id, $meta_key, $val ){ $encoded = json_encode( $val ); update_post_meta( $id, $meta_key, $encoded ); } // 取得 function my_get_post_meta( $id, $meta_key ){ $val = get_post_meta( $id, $meta_key, true ); $trimed = my_trim_doublequote($val); $decoded = json_decode( $trimed ); return $decoded; }

###上の問題点
ですが上の場合だとダブルクオートが余分に増えてしまい、WP_Queryに渡す$argsで下記のような書き方をしなくてはなりません。

下記は
・カスタムフィールドsearch_fields$wordがあるか
・またはsearch_fieldsが空の記事
を取得するという指定をしたものになりますが、空の指定でjson_encode([])でなくjson_encode("[]")という不自然な書き方が必要になるのです。

$args['meta_query'][] = [ 'relation'=>'OR', [ 'key' => 'search_fiedls', 'value' => $word, 'compare' => 'LIKE', 'type' => 'CHAR' ], [ 'key' => 'search_fiedls', 'value' => json_encode("[]"), // ここが不自然 //'value' => json_encode([]), // こうしたい 'compare' => '=', ], );

[]json_encodeするとき、わざわざjson_encode("[]")とダブルクオートで囲むのは不自然に感じますし、通常のシリアライズならばserialize([])で済みますから、ダブルクオートなしでjson_encode([])でできるようにしたいのです。

ですが、json_encodeによる値の保存と取得について、私には現状の書き方が限界でした。

###質問

そこで質問になります。

WP_Queryに渡す$argsで、
json_encode("[]")でなく
json_encode([])とできるようになるためには、
上記の保存と取得のコードはどう直すべきかご教授願えませんでしょうか。

gochiso👍を押しています

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問