我们有一家服务的woocommerce网上商店,有三位店铺经理。
我们希望过滤新订单并将其分配给这三个经理之一。管理人员只能看到他们分配的订单,无法访问或查看其余订单。
也许这可以通过custom_field过滤后端视图(管理面板)来完成,但我不知道这是不是一个好方法。也许有一个基于角色功能的插件。
有什么建议吗?
感谢。
答案 0 :(得分:1)
在遇到同样的问题之后,我结合了类似的,已经回答的问题的解决方案,并且它起作用了。我知道这个问题已经过时了,但是有人可能觉得它很有帮助。这是一个可能的解决方案:
function before_checkout_create_order($order, $data) {
$country = $order->billing_country;
$store_manager_id = '';
$belgium_region = ['BE', 'NL', 'DE'];
$czech_region = ['CZ', 'AT', 'SI', 'HU'];
$uk_region = ['GB'];
if (in_array($country, $belgium_region)) {
// Manually assigning the _store_manager_id using the user id, yours will differ
$store_manager_id = 7;
} else if (in_array($country, $czech_region)) {
$store_manager_id = 3;
} else if (in_array($country, $uk_region)) {
$store_manager_id = 2;
} else {
$store_manager_id = 1;
}
$order->update_meta_data('_store_manager_id', $store_manager_id);
}
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
我找到了为订单ON THIS THREAD分配自定义元键的方法,您可以看到 woocommerce_checkout_create_order 和 $ order-> update_meta_data()挂钩的内容和方法在那里,它的作者已经对它进行了很大的解释
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' ) {
// 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');
正如您所看到的,我们检查当前用户角色是否为shop_manager,因此如果您是管理员,那么之后的所有逻辑都不会计算 - 您将看到所有订单,但如果您是shop_manager你只会得到你的订单。 edit.php是woocommerce订单列表页面。
我在THIS THREAD找到了第二步,因此您也可以找到更多信息。
希望这能帮到你!
答案 1 :(得分:1)
此功能使订单仅显示给其自己的作者(商店经理):
function alter_the_edit_screen_query( $wp_query ) {
if ( ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php' ) !== false ) and ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php?post_type=unit' ) === false ) and ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php?post_type=course' ) === false ) ) {
if ( !current_user_can( 'activate_plugins' ) ) {
add_action( 'views_edit-post', 'remove_items_from_edit' );
global $current_user;
$wp_query->set( 'author', $current_user->id );
}
}
}
add_filter('parse_query', 'alter_the_edit_screen_query' );
function remove_items_from_edit( $views ) {
unset($views['all']);
unset($views['publish']);
unset($views['trash']);
unset($views['draft']);
unset($views['pending']);
return $views;
}
该其他功能对非管理员用户(作为商店经理)隐藏“所有订单”标签:
function my_custom_admin_head() {
if ( ! current_user_can( 'update_core' ) ) {
echo '<style type="text/css">
ul.subsubsub li.all { display:none!important; }
</style>';
}
}
add_action( 'admin_head', 'my_custom_admin_head' );