Edit: 为了澄清,答案是
如何将它们合并在一起以获得结果?
如果没有大量自定义SQL和使用过滤器,您真的无法做到这一点。走这条路的复杂性远远超过了任何可感知的好处,也不是很好的未来证明。我建议使用下面的解决方案,并将其全部放入一个方法中,您可以调用该方法来获取所需的内容。
Original Answer
我在本地测试了这一点,并能够得到两组结果-从那里,我通过回调将它们传递给
array_filter
要删除重复条目,请执行以下操作:
$q1 = get_users(array(
\'fields\' => \'all\',
\'role\' => \'contact\',
\'search\' => \'*\'.esc_attr( $search_term ).\'*\',
));
$q2 = get_users(array(
\'fields\' => \'all\',
\'role\' => \'contact\',
\'meta_query\' => array(
\'relation\' => \'OR\',
array(
\'key\' => \'first_name\',
\'value\' => $search_term,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'last_name\',
\'value\' => $search_term,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'location\',
\'value\' => $search_term ,
\'compare\' => \'LIKE\'
)
)
));
$results = array_merge( $q1, $q2 );
$results = array_filter( $results, function( $user ) {
static $found_users = [];
if ( in_array( $user->ID, $found_users, true ) ) {
return false;
}
$found_users[] = $user->ID;
return true;
} );
这个
static
数组在每次调用闭包时都被持久化,允许代码跟踪哪些用户已经被处理过。如果用户ID位于
$found_users
阵列,我们
return false
从数组中删除当前元素。