Группировать пользовательский запрос WP по пользовательскому мета-значению - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь запросить пользователей 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 голосов
/ 07 апреля 2019

Что привлекает мое внимание, так это то, что следующий код «переопределит» каждое состояние выставления счета последним найденным пользователем:

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

Таким образом, делая это, вы собираете несколько пользователей для разных состояний. Более того, это должно заботиться о пустых «состояниях», как вы описали. Не уверен, что это полностью решит вашу проблему, но это может стать отправной точкой для уточнения вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...