WordPressのmeta_queryを使って、カスタムフィールドに保存した配列を検索する方法

DBには配列という概念はない。「一つのセルには一つのデータのみを格納する」というシンプルなルールで作られたテーブルなので、そもそもデータベースの厳密性を大きく損なうことになるため、大前提としてやらない方が良い。ただ、WordPressでは散見される。

WordPressでは、配列をDBに保存する時に以下のようにシリアライズされている。

 a:4:{i:0;s:1:"7";i:1;s:2:"11";i:2;s:3:"884";i:3;s:2:"14";}

※上記では、WPのカスタムフィールドに投稿IDのリストを保存している。

 

分解すると、以下になっている。

  • a:配列のlength
  • i:インデックス番号
  • s:文字数
  • “”:value

meta_queryで単純に$post_idでLIKEすると、想定していない投稿がヒットしてしまう。
そのため、これを WordPressの meta_queryで取得するには、シリアル化された文字列を再現すれば良い。

sprintf( 's:%d:"%d"', strlen($var), $var )

【使用例】

'meta_query' => array(
array(
'key' => 'case-group',
'value' => sprintf( 's:%d:"%d"', strlen($post->ID), $post->ID ),
'compare' => 'LIKE'
),
)

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください