为商店经理 (woocommerce) 的订单启用和禁用 'edit'

Enable and disable 'edit' on orders for shop manager (woocommerce)

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

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

  1. 禁用添加订单(我正在关注这个并使用下面的代码添加到函数

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. 禁用创建日期(我正在关注此 - 我已经使用插件 'Simple Custom CSS and 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. 禁用产品link(只能查看产品及其 SKU,而不是单击重定向来编辑产品页面)

  3. 禁用订单操作

  4. 禁用自定义字段

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

  6. 禁用下载权限

使用 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;
    }
}