WP_Queryのmeta_queryでin_array()的なことをしたくて探してたら
Stack Exchangeで見つけたので紹介します。
「DBに保存されているhoge配列内に値$idが含まれるレコード」を抽出する場合、
単純に以下のようにINを使って書くと
$args = [
'meta_query' => [
[
'key' => 'hoge',
'value' => $id,
'compare' => 'IN'
]
]
];
$query = new WP_Query($args);
「DBに保存されている値hogeが配列$id内に含まれるレコード」
という意図と逆の意味合いになってしまいます。
実現するには、DBにシリアライズ保存されたデータからLIKEを使って文字列で抽出するそうです。
ただ$idが数字や単純なテキストの場合、単に文字列化しても誤抽出が起こりやすいので、
こちらもシリアライズして前後の記号も含めLIKE抽出します。
$args = [
'meta_query' => [
[
'key' => 'hoge',
'value' => serialize(strval($id)),
'compare' => 'LIKE'
]
]
];
$query = new WP_Query($args);