mysql 元类型为对象时的WordPress meta查询

slwdgvem  于 2023-01-04  发布在  Mysql
关注(0)|答案(1)|浏览(140)

我的自定义帖子类型上有一个object类型的 meta用户。
现在我想查询所有具有此 meta值的自定义帖子。我还没有找到查询类型对象的元值的方法。实际上有办法吗?

$args = array(
  'post_type' => 'custom-posts',
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'order' => 'ASC',
  'meta_query' => array(
    array(
      'key' => 'user.id',
      'value' => $this->user_id,
    ),
  )
);

先谢了。

pbpqsu0x

pbpqsu0x1#

当WordPress(或主题或插件)将对象或数组存储为元数据项的值时,它首先将对象serializes为文本表示。
例如,此对象

$obj = array ('first'=>'Jeff', 'last'=>'Atwood',);

序列化时为以下文本字符串:

a:2:{s:5:"first";s:4:"Jeff";s:4:"last";s:6:"Atwood";}

因此,如果您想搜索这个元数据项,比方说Jef,您将需要类似以下的内容:

$args = array(
  'post_type' => 'custom-posts',
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'order' => 'ASC',
  'meta_query' => array(
    array(
      'key' => 'user.id',
      'value' => 'Jef',
      'compare' => 'LIKE'
    ),
  )
);

它将在序列化对象的文本中搜索任何包含连续字母Jef的行,在SQL中,它使用meta_value LIKE '%Jef%'来查找要匹配的字符串。
每个参与搜索的人都承认这是一种草率而缓慢的搜索。你必须检查它返回的结果,以确保它没有匹配错误的东西。它会匹配你想要的东西,但它也可能匹配其他东西。

相关问题