【问题标题】:Allow user only read only access woocommerce允许用户只读访问 woocommerce
【发布时间】:2017-07-28 01:07:46
【问题描述】:

我已经为客户完成了一个 woocommerce 网站。根据客户要求,我遇到了问题。我的客户希望他们的代理只需要能够搜索订单,但他们不应该能够编辑任何订单,或者他们不应该看到任何其他选项。代理应该会看到所有订单详细信息,例如电话号码、电子邮件和完整的帐单地址,但他们应该无法编辑任何内容。

我尝试了一些用户角色编辑器,但没有一个提供该选项。 注意:所有订单仅限客人订单!

如果您知道如何实现这一点,请告诉我。

【问题讨论】:

  • 您是否创建了自定义角色?您可能可以定义一个角色,允许用户使用read_shop_order 而不是edit_shop_order。见this install function
  • 我会尝试这个,但是非常欢迎提供更多建议!
  • 这只是一个指向 WooCommerce 源代码的链接,它向您展示了 WooCommerce 特定的角色功能。您可能会复制 shop_manager 角色并删除编辑功能。
  • 感谢您的帮助,我能够实现它。谢谢你。我为此找到了一个客户制作的插件。
  • 您能否发布一个答案,详细说明您的发现以及如果其他人提出同样的问题,它会做什么?

标签: php wordpress woocommerce


【解决方案1】:

在你的主题functions.php中试试这个

//mydomain.com/my-account/view-order/xxxx - 任意订单号

function my_customer_has_capability( $allcaps, $caps, $args ) {

    if ( isset( $caps[0] ) ) {
        switch ( $caps[0] ) {
            case 'view_order' :
                $user_id = $args[1];
                $order   = wc_get_order( $args[2] );

                if ( $order && $user_id == $order->user_id || my_get_current_user_role() == 'editor') {
                    $allcaps['view_order'] = true;
                }
            break;
        }
    }
    return $allcaps;
}
add_filter( 'user_has_cap', 'my_customer_has_capability', 10, 3 );

function my_get_current_user_role() {
    $current_user = wp_get_current_user();
    if ( !($current_user instanceof WP_User) )
       return;

    if( empty($current_user->roles[0]) )
        return false;

    $role = ($current_user->roles[0]);
    return (string)$role;
}

【讨论】:

  • 很抱歉它没有工作。它给出了 404 未找到页面。
  • 实际上我主要担心的是我们需要代理应该能够看到包括电话号码在内的账单详细信息,但不能访问它们。我尝试了 woocommerce rest api,但它似乎对我不起作用,因为所有订单都是客人订单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2011-06-11
  • 2014-06-13
  • 2019-11-19
  • 1970-01-01
相关资源
最近更新 更多