【问题标题】:Enable and disable 'edit' on orders for shop manager (woocommerce)为商店经理 (woocommerce) 启用和禁用订单的“编辑”
【发布时间】:2021-11-20 14:36:37
【问题描述】:

我目前正在使用woocommerce-readonly-role 这个插件来禁用特定用户的编辑功能,他们只能查看订单,而不是仅出于运输目的在 woocommerce 中进行编辑。但是,我需要使某些按钮可编辑,实际上我在订单中还有一些其他功能/自定义代码,需要使其可编辑。因此,在我正在使用的当前插件中,无论我添加了哪些功能,它仍然无法编辑,因为我假设插件禁用了订单页面上的整个“可点击”按钮,而不管我添加了哪些附加功能进入订单页面。

因此,我计划选择特定用户无法访问哪个按钮。 主要问题是如何禁用编辑(仅启用只读)更多按钮/字段编辑,包括仅限商店经理,如下所示:您可以从此处查看图片参考:https://snipboard.io/AtOWBY.jpg

  1. 禁用添加订单(我按照这个并使用下面的代码添加到函数Remove or hide "add new" button on woocommerce on bulk order panel

add_filter( 'woocommerce_register_post_type_shop_order','your_function_name' );
function your_function_name($fields) {
        $fields['capabilities'] = array(
            'create_posts' => false,
          );
        return $fields;
    }
  • 它在管理员角色下工作,但我如何修改只为“商店经理”角色执行的功能)
  1. 禁用创建日期(我一直在关注此WooCommerce: Disable Date on Edit Orders - 我已使用插件“简单自定义 CSS 和 JS”尝试此代码,并使用以下代码进行相应添加。

/**
 * Enqueue a script in the WordPress admin, excluding edit.php.
 *
 * @param int $hook Hook suffix for the current admin page.
 */
function wpdocs_selectively_enqueue_admin_script( $hook ) {
    // if ( 'edit.php' != $hook ) {
    //     return;
    // }
    wp_enqueue_script( 'my_custom_woocommerce_script', get_template_directory_uri() . '/woocommerce/assets/meta-boxes-order.js', array(), '1.0' );
}
add_action( 'admin_enqueue_scripts', 'wpdocs_selectively_enqueue_admin_script' );

jQuery(document).ready(function(){
    alert("ok"); // only for testing purpose that this file is loaded
    jQuery(".order_data_column_container .order_data_column p:eq(0) input").attr('disabled', true);
});

但是,它不起作用,我该如何修改仅针对“商店经理”角色执行的功能)

我也在下面搜索了很多,但我找不到我必须在下面更改的文件,它只能查看且不可编辑。

  1. 禁用客户

  2. 禁用产品链接(只能查看产品及其 SKU,而不是单击重定向编辑产品页面)

  3. 禁用订单操作

  4. 禁用自定义字段

  5. 禁用添加新的自定义字段

  6. 禁用下载权限

【问题讨论】:

    标签: java wordpress woocommerce readonly orders


    【解决方案1】:

    使用get_current_user(),这样您就可以获取用户对象,然后从该对象检查用户的角色,如果是商店经理,然后按照您提到的那样应用您的代码。

    add_filter( 'woocommerce_register_post_type_shop_order','your_function_name' );
    function your_function_name($fields) {
        $user = wp_get_current_user();
        if ( in_array( 'shop_manager', (array) $user->roles ) ) {
            $fields['capabilities'] = array(
                'create_posts' => false,
            );
            return $fields;
        } else {
            return $fields;
        }
    }
    

    【讨论】:

    • 请标记为正确并放弃投票:)
    • 非常感谢您的帮助,但我仍然在帖子中列出了其他问题,希望对任何情况都有帮助。
    • 您可以添加 jquery 来禁用其他字段,只需检查您的路径尝试 get_stylesheet_directoty_uri() 而不是 get_template_directory_uri()
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2018-02-03
    • 2019-06-18
    • 1970-01-01
    • 2020-10-15
    • 2021-11-21
    相关资源
    最近更新 更多