Персональный менеджер 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 шт):
Я смог найти в чём была проблема. В целом, вся программа была правильная, единственное что, я забыл изменить настройки 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');