可湿性粉剂查询元值-如何识别特定的、唯一的值?

时间:2021-05-08 作者:Pete Hayman

在我的俱乐部简介页面上,我显示了一个帖子列表(球员简介),其中特定俱乐部简介页面的标题也是这些球员简介中包含的一个元值,对应一个或两个键:PreviousLater.

我使用的WP查询是:

$clubname = get_the_title();
$args = array(
\'post_type\'=> \'players\',
\'meta_key\' => \'last_name\',  
\'orderby\' => \'meta_value\',
\'order\'    => \'ASC\',
\'posts_per_page\' => -1,
\'meta_query\' => array(\'relation\' => \'OR\',
   array(\'key\'=> \'previous\',
         \'value\' => $clubname,
         \'compare\' => \'LIKE\',
        ),
   array(\'key\'=> \'later\',
         \'value\' => $clubname,
         \'compare\' => \'LIKE\',
        ),
   ),
$sharedplayers = new WP_Query( $args );

if ($sharedplayers->have_posts()) : while ($sharedplayers->have_posts()) : $sharedplayers->the_post();
这在绝大多数情况下都有效,因为大多数俱乐部简介标题都是独一无二的。然而,至少有一个例子,其中有一个值出现在较长的值中,即。,Cove / Coventry市。因此,Cove Club Profile上的球员档案列表也(错误地)包括将考文垂市作为元值的球员档案。

在使用各种比较运算符进行实验后(LIKE, =, 和REGEXP), 我还没有找到解决方案Cove 其本身仅被识别为元价值,而不是与Coventry City. 它是否像将空间分解到查询中那样“简单”?如果是,在值为$clubname?

1 个回复
最合适的回答,由SO网友:Álvaro Franz 整理而成

您将多个值存储到一个元条目中,而不是将每个值存储在其自己的元条目中(这将是最佳方法)。

但你仍然可以这样做。

根据the docs, 对于WP查询匹配运算符,可以使用:

可能的值为“=”、“!=”、\'>;\',\'>;=\',\'<;\',\'<;=\',\'“LIKE”、“NOT LIKE”、“IN”、“NOT IN”、“BETWEEN”、“NOT BETWEEN”、“EXISTS”

如果你同意= 运算符,由于将俱乐部名称存储为子字符串,因此无法获得预期结果。

如果你同意LIKE 操作员,如果您的俱乐部名称是另一个俱乐部名称的一部分,您将得到不想要的结果。像CoveCoventry.

因此,如果您不想将名称存储为单个条目,一种可能的解决方案是通过在$clubname 变量

For example:

\'meta_query\' => array(\'relation\' => \'OR\',
   array(\'key\'=> \'previous\',
         \'value\' => $clubname.\',\',
         \'compare\' => \'LIKE\',
        ),
   array(\'key\'=> \'later\',
         \'value\' => $clubname.\',\',
         \'compare\' => \'LIKE\',
        ),
   )
但只有当你所有的俱乐部名称后面都有逗号时,这才有效。包括列表中的姓氏!

它不适用于空间,因为这无法检测到沃克斯霍尔电机和沃克斯霍尔电机(伦敦)之间的差异

因此,在这种情况下,您的元值内容应该是:

"E;不管怎样,其他的东西,布拉布拉布拉,沃克斯豪尔汽车,其他,“;

但真正好的解决方案是有一个包含确切名称的元字段,然后您可以使用= 没有问题。