Персональный менеджер woocommerce

Пишу интернет магазин на woocommerce и столкнулся с проблемой. Нужно сделать систему с персональными менеджерами. Суть такова: администратор устанавливает в админке зависимость id клиента - id менеджера. Когда клиент сделает заказ, то его должен видеть только менеджер (закреплённый за клиентом) и администратор.

Видел одно из решений на stack overlow, но оно почему-то у меня не работает.

function before_checkout_create_order($order, $data) {
    $store_manager_id = 4;
    $order->update_meta_data('_store_manager_id', $store_manager_id);
}
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);


function custom_admin_shop_manager_orders($query) {
    $qv = &$query->query_vars;

    $currentUserRoles = wp_get_current_user()->roles;
    $user_id = get_current_user_id();

    if (in_array('shop_manager', $currentUserRoles)) {
        print_r($query);
        if (isset($qv['post_type']) && $qv['post_type'] == 'shop_order' ) {
            // I use the meta key from step 1 as a second parameter here
            $query->set('meta_key', '_store_manager_id');
            // The value we want to find is the $user_id defined above
            $query->set('meta_value', $user_id);
        }
    }
    return $query;
}
add_filter('pre_get_posts', 'custom_admin_shop_manager_orders');

Подскажите, в чём ошибка, и как вообще это реализовать?


Ответы (1 шт):

Автор решения: TURBO

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

Код, как я уже говорил, брал с stackoverflow. Там образом он выглядит:

function before_checkout_create_order($order, $data) {
    $store_manager_id = '';

    // Ваша логика формирования связи клиент - персональный менеджер.
    // Я буду реализовывать зависимость через сторонний плагин Carbon Fields.
    // $store_manager_id - id менеджера, кому будет видеть данный заказ.

    $order->update_meta_data('_store_manager_id', $store_manager_id);
}
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);

function custom_admin_shop_manager_orders($query) {
    global $pagenow;
    $qv = &$query->query_vars;

    $currentUserRoles = wp_get_current_user()->roles;
    $user_id = get_current_user_id();

    if (in_array('shop_manager', $currentUserRoles)) {
        if ( $pagenow == 'edit.php' && 
                isset($qv['post_type']) && $qv['post_type'] == 'shop_order' ) {
            $query->set('meta_key', '_store_manager_id');
            $query->set('meta_value', $user_id);
        }
    }

    return $query;
}
add_filter('pre_get_posts', 'custom_admin_shop_manager_orders');
→ Ссылка