カスタムフィールドに配列を入れた場合のmeta_queryの記述

前回カスタムフィールドに配列を追加することができましたという記事を書きましたが、カスタムフィールドに配列を入れた結果、meta_queryが思ったように動かなくなりました。

これはメタデータに配列を書き込んだ場合シリアライズされて保存されるからで、正しい結果を取得するためにはvalueにシリアライズ後の値を指定する必要があります。

PHP: serialize - Manual

例えば以下の例は「someKey」というカスタムフィールドが空でない記事を取得するケースです。
※空というか空のarrayを入れてしまった記事を除外する、と言ったほうが正しい。

AD

余談:カスタムフィールドに配列を入れた時のWordPressの動き

実際にコードを見るとすぐに分かるのですが、add_post_metaなどのメタデータを追記する処理はadd_metadataという関数が行なっています。

valueを追加する際にmaybe_serializeという関数を通していますが、これはmaybe_serializeの処理を見てみると分かる通り、配列やオブジェクトが渡された場合にシリアライズするという処理です。

カスタムフィールドなどのメタデータに文字列以外が入ることも想定されているようですので、メタデータに配列を持たせることがバッドノウハウというわけではなさそうです。

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

コメントはまだありません。