2013-12-10 44 views
2

确定你会认为这是一段相当平凡的代码,但它不起作用。检查元字符串中是否存在元字符串中使用meta_query check in wordpress get_posts函数

下面的代码没有被破坏,它只是不能正常工作。


好吧,在WordPress我有一个自定义字段在我的自定义后类型:个人,这个自定义字段具有meta_key:LOGIN_EMAIL

这个meta_key的内容仅仅是电子邮件地址。

以下是内容一些例子..

[email protected], [email protected], [email protected] 

或..

[email protected], [email protected] 

,甚至只是一个单一的电子邮件串..

[email protected] 

OK ,所以现在你看到了自定义fi的字符串内容场。我可以解释我想要达到的目标。

我有这个变量... $current_user_email = $current_user->user_login;

这是一个单一的电子邮件地址字符串。

然后我需要找到这个电子邮件地址是否存在于meta_key内容中。因此,这是如何我已经做到了......

$lastposts = get_posts(array(
    'posts_per_page' => 1, 
    'post_type'   => 'individual', 
    'post_status'  => 'private', 
    'meta_query'  => array(
     array(
      'key' => 'login_email', 
      'value' => $current_user_email, 
      'compare' => 'IN' 
     ) 
    ) 
)); 


在我上面的例子,如果我赞同$current_user_email它输出[email protected]

但是,即使存在[email protected]在这样的自定义字段之一... [email protected], [email protected], [email protected]中,我的get_post不会返回任何内容。

如果我然后转到帖子编辑器并从自定义字段中删除所有其他电子邮件,所以[email protected]是自定义字段中的唯一文本,那么上面的查询可以工作!

我的问题是,我怎么能得到meta_query到包含这个字符串meta_key内找到[email protected][email protected], [email protected], [email protected]

因为“IN”没有做它是什么意思。从http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters


感谢

+0

如果你有三个电子邮件地址,你如何添加它们?作为包含全部三个地址(字面上是'[email protected],[email protected],bob.dougal @ hotmail.com')的单个元字段,或者作为三个单独的元字段,每个元字段包含一个电子邮件地址?如果是第一个选项,则用'LIKE'替换'IN'。 –

+0

是的 - 喜欢工作的感谢!是一个元包含只是作为一个字符串(而不是一个数组) – Joshc

+0

乐于帮助。我已经添加了这个答案,并希望你能接受。谢谢。 –

回答

2

我相信这可能会发生,因为你是在一个关键的存储多个电子邮件地址采取


代码,而不是有多个按键每个电子邮件地址。

因此,IN将不起作用,因为它会检查给定值是否存在于一组可能性内(类似于PHP in_array()的工作方式)。

你需要做的是用LIKE替换IN。这将检查整个字符串是否出现您的电子邮件地址并返回匹配项。

你应该小心,因为这可能会导致不稳定的结果。例如,如果$current_user_email = [email protected];则以下所有的将是真实的 -

[email protected], [email protected], [email protected] 
[email protected], [email protected], [email protected] 
[email protected], [email protected], [email protected] 

我会给予你,这是不可能的,但是这就是为什么你不应该使用字符串存储多个值。我强烈建议使用多个密钥(可以使用多个密钥),然后在查询中使用IN。这也只能保证完全匹配。

+0

这是关于事件的一个非常好的观点 - 但对于我的小项目来说这是非常不可能的,所以是一个快速解决方案。谢谢 – Joshc

+0

在这种情况下表示同意,但很高兴知道未来。毫无疑问,下一个项目将在您目前的项目完成后立即开始! –

相关问题