通过自定义元值对WP用户查询进行分组

时间:2019-04-07 14:36:15

标签: php wordpress

我正在尝试查询WP用户并按billing_state(一个自定义的元键/值)对它们进行分组,但是我得到了一些意外的结果,它给了我一些空的选项,但每个结果只返回一个结果billing_state

基于对SO的研究,建议我查询所有用户,然后创建一个新数组,在其中可以将状态设置为数组键,然后将用户对象设置为值。

这是我尝试过的:

add_shortcode('pro_pro_users','pro_pro_users'); 
function pro_pro_users(){

    global $wpdb; 
    $user_query = new WP_User_Query( array( 'fields' => 'all' ) ); 
    $users = $user_query->get_results(); 

    if (!empty($users)) { 
        $usersByState = array();
        foreach ($users as $user) {
            $usersByState[get_user_meta($user->ID, 'billing_state', true)] = $user;
        }

        foreach ($usersByState as $k => $v){ 
      if(!empty($v)) {
        echo '<li><h5>' . $k . '</h5>';
          echo '<ul>'; 
            foreach ($v as $user) {
               echo '<li><a href="' . get_author_posts_url($user->ID) . '">' . get_user_meta($user->ID, 'first_name', true) . ' ' . get_user_meta($user->ID, 'last_name', true) . ' (' . $user->display_name . ')</a></li>'; 
            }
          echo '</ul>';
        echo '</li>';
      }
        }

      echo '</ul>'; 
    } else { 
       echo 'No users found'; 
    } 
}

这是正在发生的事情(请注意,空状态,每个状态仅一个状态,尽管我知道其中一些状态不止一个 enter image description here

我已检查:

https://codex.wordpress.org/Class_Reference/WP_User_Query https://codex.wordpress.org/Database_Description#Table:_wp_users https://codex.wordpress.org/Function_Reference/get_users https://wordpress.stackexchange.com/questions/105937/group-posts-by-meta-key https://wordpress.stackexchange.com/questions/205427/group-posts-by-attachment-meta-key https://usersinsights.com/wordpress-user-meta-query/

1 个答案:

答案 0 :(得分:0)

引起我注意的是,以下代码将用找到的最后一个用户“覆盖”每个计费状态:

  $usersByState = array();
  foreach ($users as $user) {
    $usersByState[get_user_meta($user->ID, 'billing_state', true)] = $user;
  }

据我了解,您宁愿去:

 $usersByState = array();
 foreach ($users as $user) {
    $billing_state = get_user_meta($user->ID, 'billing_state', true);
    if ($billing_state)
       $usersByState[$billing_state][] = $user;
 }

因此,通过执行此操作,您将收集不同状态的多个用户。此外,这应注意您所描述的空“状态”。不确定是否可以完全解决您的问题,但这可能是完善功能的起点。