Как сохранить коллекцию подходящих клиентов из get_users в массив в WordPress? - PullRequest
0 голосов
/ 03 октября 2018

В моем случае я должен разрешить пользователям-администраторам просматривать заказы и подписки клиентов, принадлежащих определенному местоположению.Моя ключевая цель - разрешить пользователю-администратору A (принадлежащему к определенному местоположению, такому как Location-A) просматривать заказы / подписки клиентов, которые отправили заказы / подписки из этого конкретного местоположения, то есть Location-A.Я использовал настраиваемое поле и назвал его компанией с типом Выбор на стороне пользователя, чтобы назначить компанию на основе местоположения для пользователей-администраторов.

Клиенты отправляют свои заказы / подписки на услуги в зависимости от их географического местоположения, иих заказы / подписки присваиваются определенной ветви (в данном случае администраторам) с правами для управления заказами / подписками этого конкретного местоположения.Никакой другой пользователь-администратор не может просматривать заказы / подписки в другом месте.то есть заказы Location-A будут видны только пользователю-A, а заказы Location-B будут видны только пользователю-B.Администратор может просматривать все заказы.Я использовал следующий код и работает нормально.

    function company_filter_orders($query) {
global $post_type;
$customers = array();
if($post_type === 'shop_order' || $post_type === 'shop_subscription')
{
    $curr_user_id = get_current_user_id();
    // the value is 0 if the user isn't logged-in
    if ( $curr_user_id != 0 ) {
        // we know now the user is logged-in, so we can use his/her ID to get the user meta
        $um_value = get_user_meta( $curr_user_id, 'company', true );
        // now we check if the value is correct
        if ( ! empty( $um_value ) ){
            // now we get all the users whose company matches meta_value
            //echo 'user meta has the value';

            $members = get_users(array(
                    'meta_key' => 'company', 
                    'meta_value' => $um_value,
                )
            );
            //build an array of company users/customers only
            foreach( $members as $usr ) {
                $customers[] = $usr->ID;
            }
        }
    }

    if(count($customers) > 0)
    {   //set meta query to match customer id with above setup array of customers
        $query->set( 'meta_query', array(        
            array(
                  'key' => '_customer_user',
                  'value' => $customers, //pass array of customers to fetch orders/subscriptions for those customers only
                  'compare' => 'In',
                  'type' => 'numeric'
            )
        ));
    }
}

return $query;
}
add_filter('pre_get_posts', 'company_filter_orders');

Теперь я хочу включить множественный выбор в настраиваемом поле «Выбор», чтобы пользователи-администраторы могли выбирать несколько мест, чтобы они могли просматривать заказы / подписки.клиентов, полученных из двух или более разных мест.Мне также интересно, как WordPress будет сохранять несколько компаний / мест для администратора в базе данных.Если он будет сохранен как массив JSON, то как я могу выбрать заказы / подписки в двух разных местах / компаниях и показать их вошедшему в систему пользователю.Я пробовал разные методы, но в моем случае ничего не работает.Пожалуйста, совет.

...