###現状
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([])
とできるようになるためには、
上記の保存と取得のコードはどう直すべきかご教授願えませんでしょうか。
あなたの回答
tips
プレビュー