Skip to content

Instantly share code, notes, and snippets.

@thisissandip
Last active February 3, 2026 09:04
Show Gist options
  • Select an option

  • Save thisissandip/54ec2f135c19614ab72f9a4feed8b405 to your computer and use it in GitHub Desktop.

Select an option

Save thisissandip/54ec2f135c19614ab72f9a4feed8b405 to your computer and use it in GitHub Desktop.
Custom Roles for WooCommerce: Fulfilment Operator & Store Operator
function wccr_add_roles_snippet() {
// Uncomment these "Remove" lines ONCE if you change capabilities below and need to refresh the roles.
// remove_role( 'fulfilment_operator' );
// remove_role( 'store_operator' );
// 1. Fulfilment Operator
add_role(
'fulfilment_operator',
__( 'Fulfilment Operator', 'woocommerce' ),
array(
'read' => true,
'manage_woocommerce' => false,
'view_woocommerce_reports' => false,
// Order Capabilities
'edit_shop_order' => true,
'read_shop_order' => true,
'edit_shop_orders' => true,
'edit_others_shop_orders' => true,
'publish_shop_orders' => true,
'read_private_shop_orders' => true,
'delete_shop_orders' => true,
'delete_others_shop_orders' => true,
'delete_private_shop_orders' => true,
)
);
// 2. Store Operator
add_role(
'store_operator',
__( 'Store Operator', 'woocommerce' ),
array(
'read' => true,
'manage_woocommerce' => false,
'view_woocommerce_reports' => true,
'upload_files' => true,
// Order Capabilities
'edit_shop_order' => true,
'read_shop_order' => true,
'edit_shop_orders' => true,
'edit_others_shop_orders' => true,
'publish_shop_orders' => true,
'read_private_shop_orders' => true,
'delete_shop_orders' => true,
'delete_others_shop_orders' => true,
'delete_private_shop_orders' => true,
// Product Capabilities
'edit_product' => true,
'read_product' => true,
'delete_product' => true,
'edit_products' => true,
'edit_others_products' => true,
'publish_products' => true,
'read_private_products' => true,
'delete_products' => true,
'delete_private_products' => true,
'delete_others_products' => true,
'edit_published_products' => true,
'delete_published_products' => true,
// Term Capabilities
'manage_product_terms' => true,
'edit_product_terms' => true,
'delete_product_terms' => true,
'assign_product_terms' => true,
)
);
}
add_action( 'init', 'wccr_add_roles_snippet' );
/**
* Grant admin access to custom roles.
*/
function wccr_grant_admin_access_snippet( $prevent ) {
if ( current_user_can( 'fulfilment_operator' ) || current_user_can( 'store_operator' ) ) {
return false;
}
return $prevent;
}
add_filter( 'woocommerce_prevent_admin_access', 'wccr_grant_admin_access_snippet' );
add_filter( 'woocommerce_disable_admin_bar', 'wccr_grant_admin_access_snippet' );
function wccr_remove_menu_items_snippet() {
if ( current_user_can( 'fulfilment_operator' ) || current_user_can( 'store_operator' ) ) {
// Remove "Home" (Analytics/Overview)
remove_submenu_page( 'woocommerce', 'wc-admin' );
}
}
add_action( 'admin_menu', 'wccr_remove_menu_items_snippet', 99 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment