Éditeur en masse WooCommerce : « interdit » pour le gestionnaire de boutique
Lorsqu'un gestionnaire de boutique saisit un nouveau prix dans l'éditeur en masse WooCommerce et que la cellule répond interdit (forbidden), il ne lui manque pas de capacité WordPress. BEAR a ses propres règles de champs pour tous les rôles sauf administrateur, et ces règles n'autorisent pas encore ce champ. Voici comment BEAR décide qui peut l'ouvrir et qui peut modifier quel champ, comment lire le symptôme, et comment donner à un rôle exactement l'accès qu'il lui faut, le restreindre, ou partager une même configuration avec toute l'équipe.
Deux contrôles : qui peut ouvrir BEAR, et qui peut modifier un champ
Le premier contrôle est l'accès WordPress. La page BEAR Bulk Editor sous Produits est enregistrée pour la capacité manage_woocommerce, que l'Administrateur et le Gestionnaire de boutique possèdent par défaut, et chaque requête envoyée par l'éditeur (enregistrer une cellule, lancer une modification en masse, supprimer, charger des profils) la vérifie à nouveau. Les requêtes qui modifient des produits vérifient en outre que l'utilisateur a le droit de modifier chacun de ces produits au sens de WordPress. Un rôle sans edit_others_products ne peut donc modifier que les produits dont il est l'auteur. Quand ce contrôle échoue, rien n'est enregistré et la cellule modifiée affiche 0.
Le second contrôle est la règle de champ de BEAR. Les rôles de la liste woobe_permit_special_roles, qui ne contient par défaut que administrator, peuvent modifier tous les champs. Tout autre rôle capable d'ouvrir l'éditeur, Gestionnaire de boutique comme rôle personnalisé, ne peut modifier que les champs qu'un administrateur a marqués visible pour le gestionnaire de la boutique (visible for the shop manager) dans l'onglet Paramètres (Settings). L'enregistrement de tout autre champ est refusé, et la cellule affiche interdit (forbidden).
D'anciennes réponses du forum affirment que l'utilisateur a besoin de manage_options. La version actuelle ne vérifie pas du tout manage_options pour la modification. Donner cette capacité à un gestionnaire de boutique lui ouvre les écrans de réglages de WordPress sans changer les règles de champs ; ne le faites donc pas pour corriger une réponse interdit (forbidden).
Lire le symptôme : ce que signifient interdit (forbidden) et 0
| Ce que vous voyez | Cause | Remède |
|---|---|---|
| Le gestionnaire de boutique voit toutes les colonnes, chaque modification répond interdit (forbidden), l'onglet Modifier en bloc ne propose aucun champ | Aucun administrateur n'a encore enregistré l'onglet Paramètres, donc aucun champ n'est marqué pour les rôles autres qu'administrateur | Connectez-vous en administrateur, ouvrez Paramètres, réglez les interrupteurs, appuyez sur Enregistrer tous les réglages (Save all settings) |
| Une colonne répond interdit (forbidden), les autres s'enregistrent | Ce champ n'est pas coché, ou il a été ajouté plus tard (un champ méta, un nouvel attribut) et les paramètres n'ont pas été enregistrés depuis | Cochez-le et enregistrez de nouveau l'onglet Paramètres |
| Une colonne manque pour le gestionnaire de boutique mais reste visible pour vous | Les colonnes non cochées ne sont pas affichées pour les rôles autres qu'administrateur ; les administrateurs les voient toujours toutes | Comportement normal ; cochez-la si le rôle en a besoin |
La cellule affiche 0 | Le rôle n'a pas manage_woocommerce, n'a pas le droit de modifier ce produit (produit d'un autre auteur sans edit_others_products), ou la page est restée ouverte si longtemps que son jeton de sécurité a expiré | Rechargez d'abord la page ; vérifiez ensuite les capacités du rôle |
| Un administrateur obtient interdit (forbidden) | BEAR lit le premier rôle enregistré pour le compte. Un administrateur qui porte aussi un rôle issu d'une extension d'adhésion ou d'édition de rôles peut être traité comme cet autre rôle | Testez avec un nouveau compte administrateur, puis nettoyez les rôles de l'ancien |
| La quantité en stock est acceptée mais ne reste pas | WooCommerce ne conserve une quantité que sur les produits dont le stock est suivi | Rendez aussi Gérer le stock (Manage stock) visible pour le rôle et réglez-le sur Oui |
Les causes générales des modifications qui ne s'enregistrent pas (la touche Entrée, la modification liée, les pare-feu, le cache) sont décrites dans L'éditeur en masse WooCommerce n'enregistre pas les modifications.
Laisser les gestionnaires de boutique modifier les colonnes dont ils ont besoin
C'est la méthode prévue, et elle ne demande aucun code.
- Connectez-vous en administrateur et ouvrez l'onglet Paramètres de l'éditeur. Sous chaque colonne se trouve une case visible pour le gestionnaire de la boutique (visible for the shop manager). Seuls les administrateurs la voient.
- Cochez-la sous les colonnes que le rôle doit voir et modifier, décochez-la sous les autres. Pour travailler sur le stock, cochez ensemble Gérer le stock (Manage stock), Quantité en stock (Stock quantity) et état du stock (Stock status) : une quantité saisie sur un produit dont la gestion du stock est désactivée est écartée par WooCommerce à l'enregistrement du produit.
- Appuyez sur Enregistrer tous les réglages (Save all settings). Cet enregistrement écrit les règles de rôle ; avant le premier enregistrement, il n'y en a aucune.
- Connectez-vous en gestionnaire de boutique, ou rechargez la page qu'il a ouverte, et testez une cellule.
Le même interrupteur décide de trois choses pour le rôle : quelles colonnes l'Editeur de produits affiche, quels champs l'onglet Modifier en bloc propose, et quelles taxonomies l'onglet Filtres liste. La FAQ sur le gestionnaire de boutique montre une configuration typique pour les prix et le stock. Gardez à l'esprit que l'interrupteur est une règle unique pour tous les rôles autres qu'administrateur : un rôle personnalisé obtient exactement ce que obtient le gestionnaire de boutique. Pour des règles différentes selon le rôle ou l'utilisateur, il faut le filtre ci-dessous.
Accorder un accès complet ou écrire des règles par rôle dans le code
Les deux filtres se placent dans le functions.php du thème enfant ou dans une extension d'extraits de code. Ils figurent avec les autres options cachées sur Plus de paramètres (implicites).
Traiter un rôle comme administrateur : woobe_permit_special_roles
// Child theme functions.php or a code snippets plugin.
// BEAR: shop managers get every field, like administrators.
add_filter( 'woobe_permit_special_roles', function ( $roles ) {
$roles[] = 'shop_manager';
return $roles;
} );
Utilisez le slug du rôle, pas son nom affiché ; un rôle personnalisé créé avec une extension d'édition de rôles a son propre slug. Un rôle de cette liste échappe à toutes les règles de champs et est aussi, à tous égards, un administrateur à l'intérieur de BEAR : il voit les interrupteurs visible pour le gestionnaire de la boutique (visible for the shop manager), l'onglet Champs méta (Meta Fields) et les options de l'onglet Paramètres valables pour toute la boutique, et il voit et peut annuler l'Historique de tous les utilisateurs. Ne l'accordez qu'aux personnes à qui vous confieriez le compte administrateur.
Décider champ par champ et rôle par rôle : woobe_user_can_edit
BEAR interroge ce filtre à chaque enregistrement fait par un rôle qui ne figure pas dans la liste spéciale. Il reçoit la valeur de l'onglet Paramètres (1 autorisé, 0 non), la clé du champ et toute la table de visibilité, et doit renvoyer 1 pour accepter l'enregistrement ou 0 pour le refuser. Un ancien exemple nomme le premier argument $is_forbidden ; c'est l'inverse, 1 signifie autorisé.
// Child theme functions.php or a code snippets plugin.
// BEAR: the content team edits what the Settings tab allows, except prices.
add_filter( 'woobe_user_can_edit', function ( $can_edit, $field_key, $visibility ) {
$user = wp_get_current_user();
// 'catalog_editor' is the slug of your custom role
if ( in_array( 'catalog_editor', (array) $user->roles, true )
&& in_array( $field_key, array( 'regular_price', 'sale_price' ), true ) ) {
return 0;
}
return $can_edit;
}, 10, 3 );
Le filtre décide si un enregistrement est accepté ; il n'affiche pas les colonnes. Une colonne décochée dans Paramètres reste cachée pour tous les rôles autres qu'administrateur, quelle que soit la valeur renvoyée par le filtre : cochez donc les colonnes dont l'un de ces rôles a besoin et restreignez-les rôle par rôle dans le filtre. Les réponses du forum suggèrent souvent un filtre qui renvoie simplement 1. Il fait bien disparaître interdit (forbidden), mais il permet à tout rôle capable d'ouvrir l'éditeur de modifier tous les champs visibles, ce qui n'est généralement pas ce que vous vouliez autoriser.
Restreindre un rôle à la place
Les extraits de cette section se placent eux aussi dans le functions.php du thème enfant ou dans une extension d'extraits de code.
- Lecture seule pour tous sauf les administrateurs. Renvoyez
0depuiswoobe_user_can_editpour chaque champ. Les rôles de la liste spéciale ne sont jamais interrogés : les administrateurs continuent donc à modifier.add_filter( 'woobe_user_can_edit', function ( $can_edit, $field_key, $visibility ) { return 0; }, 10, 3 ); - Pas de publication. Décochez visible pour le gestionnaire de la boutique (visible for the shop manager) sous la colonne État (Status). Le rôle ne peut alors plus changer le statut du produit dans le tableau ni dans Modifier en bloc.
- Masquer des onglets.
woobe_show_tabsreçoit le slug de l'onglet :settings,bulk,filters,export,history,metaouinfo(l'onglet Aide). Vérifiez le rôle à l'intérieur, sinon les onglets disparaissent aussi pour les administrateurs.add_filter( 'woobe_show_tabs', function ( $show, $slug ) { $user = wp_get_current_user(); if ( in_array( 'shop_manager', (array) $user->roles, true ) && in_array( $slug, array( 'settings', 'export', 'info' ), true ) ) { return false; } return $show; }, 99, 2 ); - Pas de suppression. Il n'existe pas d'option pour cela : supprimer des produits dans BEAR exige les mêmes droits que les modifier, et la Corbeille de WordPress reçoit ce qui est supprimé. Pour empêcher les boutons de suppression de fonctionner pour tout utilisateur de rang inférieur à administrateur, refusez les deux requêtes de suppression avant que BEAR ne les traite :
// Only administrators may delete products from the bulk editor. foreach ( array( 'woobe_delete_products', 'woobe_bulk_delete_products' ) as $woobe_action ) { add_action( 'wp_ajax_' . $woobe_action, function () { if ( ! current_user_can( 'manage_options' ) ) { wp_die( '0', '', array( 'response' => 403 ) ); } }, 0 ); } - Uniquement ses propres produits. L'option Rôles vendeur (Vendor roles) de l'onglet Paramètres accepte des slugs de rôles ; les utilisateurs ayant ces rôles ne voient et ne modifient que les produits dont ils sont l'auteur.
- Aucun accès à l'éditeur en masse. Retirer
manage_woocommerceà un rôle lui retire l'éditeur, et le menu WooCommerce avec. Pour retirer uniquement BEAR à tous ceux qui sont sous le rang d'administrateur, supprimez son entrée de menu et refusez la page elle-même, car une entrée de menu supprimée n'arrête pas à elle seule quelqu'un qui ouvre directement l'adresse :// BEAR only for administrators. add_action( 'admin_menu', function () { if ( ! current_user_can( 'manage_options' ) ) { remove_submenu_page( 'edit.php?post_type=product', 'woobe' ); } }, 100 ); add_action( 'admin_init', function () { if ( isset( $_GET['page'] ) && 'woobe' === $_GET['page'] && ! current_user_can( 'manage_options' ) ) { wp_die( 'Sorry, you are not allowed to access this page.', '', array( 'response' => 403 ) ); } } );
Configurations d'équipe : paramètres partagés, profils et Historique
Chaque compte a ses propres paramètres BEAR (colonnes actives, leur ordre, options) et ses propres profils de colonnes et de filtres. Deux personnes peuvent travailler en même temps sans modifier l'écran de l'autre, comme le décrit la FAQ sur le travail en équipe. Quand tout le monde doit voir la même configuration, un filtre suffit à faire lire et écrire à tous les comptes une configuration unique :
// Child theme functions.php or a code snippets plugin.
// BEAR: one settings set for all users instead of one per user.
add_filter( 'woobe_settings_key_options', function ( $key ) {
return 'for_all';
} );
La configuration partagée part des valeurs par défaut : configurez donc les colonnes une fois après avoir ajouté le filtre. Elle contient les paramètres, pas les règles de rôle : les interrupteurs visible pour le gestionnaire de la boutique (visible for the shop manager) continuent de s'appliquer.
Les profils sont à part. L'option Synchroniser les profils des gestionnaires (Synchronize managers profiles) (Paramètres généraux, réservée aux administrateurs) fait utiliser à tous les comptes autres qu'administrateur un même ensemble de profils de colonnes et de filtres ; les administrateurs gardent toujours les leurs. L'option est stockée avec les paramètres du compte qui l'enregistre, et chaque utilisateur lit ses propres paramètres : les gestionnaires la prennent donc en compte lorsque les comptes partagent une configuration unique via woobe_settings_key_options. Les profils enregistrés avant son activation restent attachés au compte qui les a créés ; recréez les profils partagés. Un profil ne peut pas être réenregistré : créez-en un nouveau et supprimez l'ancien.
Sur un réseau multisite, chaque site a ses propres paramètres BEAR, ses profils et ses règles de rôle ; rien n'est partagé entre les sites. Un super administrateur qui n'a aucun rôle sur un site y compte comme administrateur.
L'Historique suit la même logique. Depuis la version 2.2.4, chaque ligne enregistre qui a fait la modification et si elle a été faite à la main ou via l'assistant IA. Les administrateurs, ainsi que les rôles ajoutés avec woobe_permit_special_roles, voient et peuvent annuler les modifications de tout le monde ; les autres utilisateurs ne voient et n'annulent que les leurs. Plus de détails dans la documentation de l'Historique.
Si un gestionnaire de boutique obtient encore « interdit »
- Rechargez la page de l'éditeur ; une page laissée ouverte pendant de nombreuses heures envoie un jeton de sécurité expiré.
- En administrateur, ouvrez Paramètres, cochez la case visible pour le gestionnaire de la boutique (visible for the shop manager) sous le champ et appuyez sur Enregistrer tous les réglages (Save all settings), même si elle semble déjà cochée.
- Vérifiez le rôle dans une extension d'édition de rôles : il lui faut
manage_woocommerce, etedit_others_productspour modifier les produits d'autres auteurs. - Cherchez vos propres extraits avec
woobe_user_can_editqui renvoient0, et vérifiez que le slug du rôle danswoobe_permit_special_rolesest écrit comme le rôle l'est réellement. - Si un administrateur est concerné, créez un nouveau compte administrateur et refaites la modification. Si le nouveau compte fonctionne, l'ancien porte un rôle supplémentaire ou des capacités modifiées.
Si rien de tout cela ne l'explique, décrivez le rôle, le champ et ce qu'affiche la cellule sur le forum d'assistance de BEAR.