【问题标题】:How can I assign an order to a certain shop manager in Woocommerce如何将订单分配给 Woocommerce 中的某个商店经理
【发布时间】:2018-02-03 09:17:20
【问题描述】:

我们有一家服务 woocommerce 在线商店,拥有三位商店经理。

我们希望过滤新订单并将其分配给这三位经理之一。经理只能查看分配给他们的订单,而不能访问或查看其他订单。

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

有什么建议吗?

谢谢。

【问题讨论】:

    标签: filter woocommerce admin orders


    【解决方案1】:

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

    1. 将包含所需 store_manager id 的自定义元键添加到每个订单(在我的情况下,如果订单来自特定国家/地区,我只想让特定的 store_manager 看到它,您可以将自定义逻辑放在 before_checkout_create_order() 函数)
    
    
        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 管理员订单列表以仅显示当前用户分配的订单(但也让主管理员查看所有订单)
    
    
        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 中找到了第二步,因此您也可以在那里找到更多信息。

    希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      此功能使订单仅显示给其自己的作者(商店经理):

      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' );
      

      【讨论】:

        猜你喜欢
        • 2020-10-15
        • 2021-11-20
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        • 2021-11-21
        • 2019-05-05
        • 1970-01-01
        • 2020-08-08
        相关资源
        最近更新 更多