如何从两个合并的WP_USER_QUERY对象中删除重复用户?

时间:2017-02-28 作者:MarvinLazer

我正在尝试编写一个使用我创建的几个自定义用户元字段的搜索,但在实现它们时遇到了困难。基本上有相同的问题this guy 我也解决了这个问题。

              $exclude = array( \'1\' ); 
              $args1 = array(
                \'exclude\'        => $exclude,
                \'search\'         => \'*\' . $search_query . \'*\',
                \'search_columns\' => array(
                  \'user_login\',
                  \'user_nicename\',
                  \'user_email\',
                  \'user_url\',
                ),
              );

              $args2 = array(
                \'exclude\'    => $exclude,
                \'meta_query\' => array(
                  \'relation\' => \'OR\',
                  array(
                    \'key\'     => \'first_name\',
                    \'value\'   => $search_query,
                    \'compare\' => \'LIKE\'
                  ),
                  array(
                    \'key\'     => \'last_name\',
                    \'value\'   => $search_query,
                    \'compare\' => \'LIKE\'
                  ),
                  array(
                    \'key\'     => \'nickname\',
                    \'value\'   => $search_query,
                    \'compare\' => \'LIKE\'
                  ),
                ),
              );

              // queries
              $search_query = new WP_User_Query( $args1 );
              $meta_query = new WP_User_Query( $args2 );

              $user_query = new WP_User_Query();
              $user_query->results = array_merge( $search_query->results, $meta_query->results );

              //populate total_users count for the loop to work correctly
              $user_query->total_users = $search_query->total_users + $meta_query->total_users;
              // Remove duplicate users from array
              /* final step goes here */
然而,现在,当搜索词与他们的共同用户重叠时,查询有时会返回两次相同的结果。有没有办法筛选重复项?

Edit: 下面是我如何解决这个问题的。

              if (!empty($search_query->results)) {
                foreach ($search_query->results as $user) {
                    $user_info = $user->ID;
                    array_push($exclude, $user_info);
                }
              }

1 个回复
最合适的回答,由SO网友:The J 整理而成

在执行第二个查询之前,将第一个查询中找到的用户ID保存为数组。

然后在exclude 值,然后运行它。

UPDATE

如何将第一个查询中的ID放入数组中,以便在第二个查询中使用。

你没用那个fields parameter, 因此,查询将返回它找到的关于用户的所有信息(all (默认值)返回WP_User 对象

// Put the found user IDs in an array, after executing the first user query
$exclude = array();
foreach ( $search_query->results as $user ) {
 $exclude[] = $user->ID;
}
现在您可以成功使用$exclude 作为参数的值\'exclude\', 正如您在第二个查询中所做的那样。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请