我的搜索工作正在进行,但客户只是提出了一个我没有考虑的请求。如果你按名字(如john)或姓氏(如doe)搜索,这绝对会带来你的结果。但如果你搜索他们的全名(如john doe),你会得到0个结果。
我环顾四周,但似乎找不到一种方法将搜索结果与“first\\u name last\\u name”进行比较。
我浏览了论坛上的类似问题,但它们没有帮助/似乎完全朝着不同的方向发展。如果有人有任何知识,或者能给我指出正确的线索,我将不胜感激。
以下是我的代码摘要:
$args = array(
\'role\' => \'Subscriber\',
\'meta_query\' => array(
array(
\'key\' => \'membership_class\',
\'value\' => \'Full\',
\'compare\' => \'=\',
\'type\' => \'CHAR\',
),
array(
\'relation\' => \'OR\',
array(
\'key\' => \'first_name\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'last_name\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'personal_city\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\',
\'type\' => \'CHAR\',
),
array(
\'key\' => \'personal_province\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\',
\'type\' => \'CHAR\',
),
array(
\'key\' => \'treatments\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\',
),
),
),
);
最合适的回答,由SO网友:dbeja 整理而成
如果使用IN运算符并将搜索词拆分为单词数组,会怎么样:
$args = array(
\'role\' => \'Subscriber\',
\'meta_query\' => array(
array(
\'key\' => \'membership_class\',
\'value\' => \'Full\',
\'compare\' => \'=\',
\'type\' => \'CHAR\',
),
array(
\'relation\' => \'OR\',
array(
\'key\' => \'first_name\',
\'value\' => explode( \' \', $usersearch ),
\'compare\' => \'IN\'
),
array(
\'key\' => \'last_name\',
\'value\' => explode( \' \', $usersearch ),
\'compare\' => \'IN\'
),
array(
\'key\' => \'personal_city\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\',
\'type\' => \'CHAR\',
),
array(
\'key\' => \'personal_province\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\',
\'type\' => \'CHAR\',
),
array(
\'key\' => \'treatments\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\',
),
),
),
);
SO网友:Faye
我今天蹲下来解决了这个问题。希望我的成功能帮助其他人。
因为元查询数组需要一个真正的meta\\u键,所以实际上需要为用户创建一个,并用您想要传递的信息填充它。请参见add_user_meta 函数获取更多信息。
因此,在运行搜索之前,我有以下几点:
<?php
$allusers = get_users(array(
\'role\' => \'subscriber\',
));
foreach ($allusers as $user) {
$firstName = get_user_meta($user->ID, \'first_name\', true);
$lastName = get_user_meta($user->ID, \'last_name\', true);
$full_name = $firstName . \' \' . $lastName . \' \';
$uid = $user->ID;
add_user_meta( $uid, \'full_name\', $full_name );
}
?>
在这里,我调用了所有用户,然后为他们定义了所有新的元用户,我的自定义值包括用户的名字和姓氏(忽略我对自定义变量的使用而不是标准变量,我在这个页面上有很多用户查询,只是想确保我没有引起任何冲突)。
然后在我的搜索查询中,我又添加了一个查询。。。
array(
\'key\' => \'full_name\',
\'value\' => $usersearch,
\'compare\' => \'LIKE\'
),
这让我对约翰、多伊和约翰·多伊这三个人都进行了搜索。