如何在Woocommerce中为某个店铺经理分配订单

时间:2017-08-25 10:29:34

标签: filter woocommerce admin orders

我们有一家服务的woocommerce网上商店,有三位店铺经理。

我们希望过滤新订单并将其分配给这三个经理之一。管理人员只能看到他们分配的订单,无法访问或查看其余订单。

也许这可以通过custom_field过滤后端视图(管理面板)来完成,但我不知道这是不是一个好方法。也许有一个基于角色功能的插件。

有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:1)

在遇到同样的问题之后,我结合了类似的,已经回答的问题的解决方案,并且它起作用了。我知道这个问题已经过时了,但是有人可能觉得它很有帮助。这是一个可能的解决方案:

  1. 将包含所需store_manager ID的自定义元键添加到每个订单(在我的情况下,如果订单来自特定国家/地区我只想要一个精美的store_manager来查看它,您可以放置​​自定义逻辑在 before_checkout_create_order()功能)
  2. 
    
        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()挂钩的内容和方法在那里,它的作者已经对它进行了很大的解释

    1. 过滤Woocommerce管理订单列表,仅显示当前用户分配的订单(但让管理员也查看所有订单)
    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' ) {
                      // 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' );