获取自定义域包含文本的帖子

时间:2014-08-10 作者:a378853

我有一个自定义字段,其中的值包含一个以逗号分隔的项目列表(例如: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代码,如果可能的话,这将很酷。

1 个回复
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_whereposts_clauses. 请注意get_posts() 默认情况下抑制过滤器,但可以使用suppress_filters 参数来控制它,或使用WP_Query() 相反

5) 手动编写SQL查询并使用$wpdb 上课,就像你已经在做的一样。

结束

相关推荐