5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Wordpressのmeta_queryを使って、指定値がmeta_valueに保存された配列に含まれるものを抽出したい

Last updated at Posted at 2022-01-14

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);

参考:
https://wordpress.stackexchange.com/questions/55354/how-can-i-create-a-meta-query-with-an-array-as-meta-field/308393#308393

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?