Показывать только локальные заказы на странице администратора WooCommerce - PullRequest
0 голосов
/ 30 марта 2019

В моем магазине клиенты могут купить один и тот же товар в нескольких местах.Каждое местоположение имеет свой собственный shop_manager, поэтому я хочу, чтобы каждый shop_manager мог видеть только те заказы, где выбранный вариант соответствует их местоположению (например, "shop_manager_min" из Миннесоты может видеть только заказы, в которых был выбран вариант "min"; "shop_manager_tex",из Техаса, могут видеть только заказы с изменением «tex» и т. д.).

Для этого я попробовал следующий код:

    add_filter( 'pre_get_posts', 'orders_by_location' );
    function orders_by_location( $query ) {
//check if user role is shop_manager to continue
        if(isset(wp_get_current_user()->roles[0]) && wp_get_current_user()->roles[0] == 'shop_manager'){
//gets the 3 character string code for the shop manager location
            $location = substr(wp_get_current_user()->user_login, -3);
//query for all the orders where the variation matches the shop manager location
            $query->set( 'meta_query', array( 
                          array( 
                                  'key' => 'attribute_pa_location', 
                                  'value' => $location, 
                                  'compare' => '=' 
            ) ) );  
        return $query; }}

Однако я ничего не получил от этогозапрос, заказы не отображаются.Что я делаю не так?


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

add_filter( 'pre_get_posts', 'orders_by_location' );
function orders_by_location( $query ) {
    if(isset(wp_get_current_user()->roles[0]) && wp_get_current_user()->roles[0] == 'shop_manager'){
        $query->set('orderby', 'attribute_pa_location' );
        $query->set('order', 'DESC' );
        return $query; }}

С предыдущим, я вижу, attribute_pa_location существуети это доступно по запросу.Я также повторил значение attribute_pa_location и значение в $ location, и оба они абсолютно одинаковые !!!Однако запрос ничего не возвращает, и на странице заказов администратора shop_manager не отображаются никакие заказы.


Я выполнил тот же первый запрос, используя _customer_user вместо attribute_pa_sede, и работал отлично.Если процедура запроса в порядке и мета-ключ также в порядке, почему не работает, когда я использую их вместе ???

1 Ответ

0 голосов
/ 07 апреля 2019

Я наконец-то обнаружил, что проблема в том, что местоположение атрибута не является частью атрибутов заказа (но является частью атрибутов продукта).В качестве решения проблемы я скопировал местоположение в идентификатор транзакции во время проверки, используя следующее действие в functions.php:

add_action( 'woocommerce_checkout_create_order', 'update_order_id', 30, 2 );
function update_order_id( $order, $posted_data ) {
    foreach ( $order->get_items() as $item ) {$location = $item->get_meta("pa_location");}
    $order->set_transaction_id($location); }

После этого я просто запрашиваю:

add_action( 'pre_get_posts', 'orders_by_location', 100 );
function orders_by_location( $query ) {
    if(isset(wp_get_current_user()->roles[0]) && wp_get_current_user()->roles[0] == 'shop_manager'){
        $location = substr(wp_get_current_user()->user_login, -3);
        $query->set('post_type', 'shop_order' );
        $query->set('post_status', array('wc-on-hold', 'wc-processing') );
        $query->set('meta_key', '_transaction_id' );
        $query->set('meta_value', $location ); } 
    return $query; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...