【问题标题】:Group WP user query by custom meta value按自定义元值分组 WP 用户查询
【发布时间】:2019-04-07 14:36:15
【问题描述】:

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

基于对 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'; 
    } 
}

这是正在发生的事情(注意空的,每个州只有一个,尽管我知道其中一些有不止一个

我已经检查过:

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/

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    引起我注意的是以下代码将“覆盖”每个帐单状态并使用最后找到的用户:

      $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;
     }
    

    因此,通过这样做,您将收集不同状态的多个用户。此外,这应该处理您所描述的空“状态”。不确定这是否能完全解决您的问题,但它可能是完善您的功能的起点。

    【讨论】:

    • 太好了,很高兴它帮助了你。
    猜你喜欢
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多