我有一个自定义字段,其中的值包含一个以逗号分隔的项目列表(例如:test1,test2,test3
), 现在,我想检索字段包含其中一个值的帖子,我有:
$query = get_posts(
array(
\'post_type\' => \'custom_post\',
\'posts_per_page\' => 11,
\'meta_query\' => array(
array(
\'key\' => \'_my_custom_field_key\',
\'value\' => array(\'test1\'),
\'compare\' => \'IN\'
)
)
)
);
但它失败了。如果我清除自定义字段中的其他值,使其仅包含
test1
但当它在逗号分隔的组中时就不是了。在SQL中,我可以使用
FIND_IN_SET
函数来搜索值,但我正在尝试尽可能多地回复核心WP,并避免使用自定义SQL代码,如果可能的话,这将很酷。
SO网友:birgire
以下是一些想法:
1) 你可以试着与LIKE
而是:
\'key\' => \'_my_custom_field_key\',
\'value\' => \'test1\',
\'compare\' => \'LIKE\'
它应该为您提供一个SQL查询,其中包含:
... LIKE \'%test1%\' ...
2)您可能希望将字符串另存为
,test1,test2,test3,
要使整个单词搜索更简单,请执行以下操作:
\'key\' => \'_my_custom_field_key\',
\'value\' => \',test1,\',
\'compare\' => \'LIKE\'
3)另一种选择是将其保存到具有多个值的元键。
4) 您还可以通过以下过滤器修改生成的SQL查询posts_where
和posts_clauses
. 请注意get_posts()
默认情况下抑制过滤器,但可以使用suppress_filters
参数来控制它,或使用WP_Query()
相反
5) 手动编写SQL查询并使用$wpdb
上课,就像你已经在做的一样。