BEAR - WooCommerce Bulk Editor and Products Manager Professional

WooCommerce Bulk Editor: Shop-Manager „nicht erlaubt“ – Rollen und Rechte

Wenn ein Shop-Manager einen neuen Preis in den WooCommerce Bulk Editor tippt und die Zelle mit nicht erlaubt (forbidden) antwortet, fehlt dem Shop-Manager keine WordPress-Berechtigung. BEAR hat für jede Rolle außer Administrator eigene Feldregeln, und diese Regeln erlauben das Feld noch nicht. Unten steht, wie BEAR entscheidet, wer den Editor öffnen und wer welches Feld ändern darf, wie Sie das Symptom lesen und wie Sie einer Rolle genau den Zugriff geben, den sie braucht, ihn einschränken oder ein Setup mit dem ganzen Team teilen.

Zwei Prüfungen: Wer den Editor öffnen darf und wer ein Feld bearbeiten darf

Die erste Prüfung ist der WordPress-Zugriff. Die Seite BEAR Bulk Editor unter Produkte ist für die Berechtigung manage_woocommerce registriert, die Administrator und Shop-Manager standardmäßig haben, und jede Anfrage, die der Editor sendet (eine Zelle speichern, ein Massenlauf, Löschen, Profile laden), prüft sie erneut. Anfragen, die Produkte ändern, prüfen zusätzlich, ob der Benutzer jedes dieser Produkte im WordPress-Sinn bearbeiten darf. Eine Rolle ohne edit_others_products kann daher nur die Produkte ändern, die sie selbst verfasst hat. Schlägt diese Prüfung fehl, wird nichts gespeichert, und die bearbeitete Zelle zeigt 0.

Die zweite Prüfung ist die Feldregel von BEAR. Die Rollen in der Liste woobe_permit_special_roles, die standardmäßig nur administrator enthält, dürfen jedes Feld bearbeiten. Jede andere Rolle, die den Editor öffnen kann, ob Shop-Manager oder eigene Rolle, darf nur die Felder bearbeiten, die ein Administrator im Einstellungen (Settings)-Tab mit sichtbar für den Shop-Manager (visible for the shop manager) markiert hat. Das Speichern jedes anderen Feldes wird abgelehnt, und die Zelle zeigt nicht erlaubt.

Ältere Forenantworten sagen, der Benutzer brauche manage_options. Die aktuelle Version prüft manage_options beim Bearbeiten überhaupt nicht. Gibt man einem Shop-Manager diese Berechtigung, öffnet das für ihn die WordPress-Einstellungsbildschirme und ändert nichts an den Feldregeln; tun Sie es also nicht, um eine nicht erlaubt-Antwort zu beheben.

Das Symptom lesen: was nicht erlaubt und 0 bedeuten

Was Sie sehenUrsacheLösung
Der Shop-Manager sieht jede Spalte, jede Bearbeitung antwortet mit nicht erlaubt, der Massenbearbeitung (Bulk Edit)-Tab bietet keine Felder anNoch kein Administrator hat den Einstellungen-Tab gespeichert, daher ist für andere Rollen als Administrator kein Feld markiertMelden Sie sich als Administrator an, öffnen Sie die Einstellungen, setzen Sie die Schalter und klicken Sie auf Alle Einstellungen speichern (Save all settings)
Eine Spalte antwortet mit nicht erlaubt, die anderen werden gespeichertDieses Feld ist nicht markiert, oder es kam später hinzu (ein Meta-Feld, ein neues Attribut) und die Einstellungen wurden seitdem nicht gespeichertMarkieren Sie es und speichern Sie den Einstellungen-Tab erneut
Eine Spalte fehlt für den Shop-Manager, ist für Sie aber sichtbarNicht markierte Spalten werden für andere Rollen als Administrator nicht gezeichnet; Administratoren sehen immer alleErwartetes Verhalten; markieren Sie die Spalte, wenn die Rolle sie braucht
Die Zelle zeigt 0Der Rolle fehlt manage_woocommerce, sie darf dieses Produkt nicht bearbeiten (Produkt eines anderen Autors ohne edit_others_products), oder die Seite war so lange geöffnet, dass ihr Sicherheits-Token abgelaufen istLaden Sie zuerst die Seite neu; prüfen Sie dann die Berechtigungen der Rolle
Ein Administrator erhält nicht erlaubtBEAR liest die erste für das Konto gespeicherte Rolle. Ein Administrator, der zusätzlich eine Rolle aus einem Mitgliedschafts- oder Rollen-Editor-Plugin trägt, kann wie diese andere Rolle behandelt werdenTesten Sie mit einem neuen Administratorkonto und bereinigen Sie dann die Rollen des alten
Die Lagerbestandsmenge wird akzeptiert, bleibt aber nicht erhaltenWooCommerce behält eine Menge nur bei Produkten, die den Lagerbestand verwaltenMachen Sie Lagerbestand verwalten (Manage stock) auch für die Rolle sichtbar und setzen Sie es auf Ja

Die allgemeinen Ursachen für Bearbeitungen, die nicht gespeichert werden (die Enter-Taste, die verknüpfte Bearbeitung, Firewalls, Caching), stehen in WooCommerce Bulk Editor: Änderungen werden nicht gespeichert.

Shop-Managern die Spalten bearbeiten lassen, die sie brauchen

Das ist der vorgesehene Weg und braucht keinen Code.

  1. Melden Sie sich als Administrator an und öffnen Sie den Einstellungen-Tab des Editors. Unter jeder Spalte gibt es ein Kontrollkästchen sichtbar für den Shop-Manager. Nur Administratoren sehen es.
  2. Markieren Sie es unter den Spalten, die die Rolle sehen und bearbeiten soll, und entfernen Sie den Haken bei den übrigen. Für die Lagerarbeit markieren Sie Lagerbestand verwalten, Lagerbestandsmenge (Stock quantity) und Lagerstatus (Stock status) zusammen: Eine Menge, die bei einem Produkt ohne Lagerverwaltung eingegeben wird, verwirft WooCommerce beim Speichern des Produkts.
  3. Klicken Sie auf Alle Einstellungen speichern. Dieses Speichern schreibt die Rollenregeln; vor dem ersten Speichern gibt es keine.
  4. Melden Sie sich als Shop-Manager an oder laden Sie die Seite neu, die er geöffnet hat, und testen Sie eine Zelle.

Derselbe Schalter entscheidet für die Rolle drei Dinge: welche Spalten der Produkteditor (Products Editor) zeichnet, welche Felder der Massenbearbeitung-Tab anbietet und welche Taxonomien der Filter (Filters)-Tab auflistet. Das FAQ zum Shop-Manager zeigt ein typisches Setup für Preise und Lagerbestand. Bedenken Sie, dass der Schalter eine einzige Regel für alle Rollen außer Administrator ist: Eine eigene Rolle erhält genau das, was der Shop-Manager erhält. Unterschiedliche Regeln pro Rolle oder pro Benutzer brauchen den Filter weiter unten.

Vollzugriff gewähren oder Regeln pro Rolle im Code schreiben

Beide Filter gehören in die functions.php des Child-Themes oder in ein Code-Snippets-Plugin. Sie sind zusammen mit den anderen versteckten Optionen auf Weitere Einstellungen (implizit) aufgeführt.

Eine Rolle als Administrator behandeln: 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;
} );

Verwenden Sie den Rollen-Slug, nicht den Anzeigenamen; eine mit einem Rollen-Editor-Plugin erstellte eigene Rolle hat ihren eigenen Slug. Eine Rolle in dieser Liste überspringt alle Feldregeln und ist in BEAR auch in jeder anderen Hinsicht ein Administrator: Sie sieht die Schalter sichtbar für den Shop-Manager, den Meta-Felder-Tab und die shopweiten Optionen des Einstellungen-Tabs, und sie sieht den Verlauf jedes Benutzers und kann ihn zurücksetzen. Geben Sie sie nur Personen, denen Sie auch das Administratorkonto geben würden.

Pro Feld und pro Rolle entscheiden: woobe_user_can_edit

BEAR fragt diesen Filter bei jedem Speichern durch eine Rolle ab, die nicht in der Spezialliste steht. Er erhält den Wert aus dem Einstellungen-Tab (1 erlaubt, 0 nicht erlaubt), den Feldschlüssel und die gesamte Sichtbarkeitsübersicht und muss 1 zurückgeben, um das Speichern anzunehmen, oder 0, um es abzulehnen. Ein älteres Beispiel nennt das erste Argument $is_forbidden; das ist das Gegenteil, 1 bedeutet erlaubt.

// 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 );

Der Filter entscheidet, ob ein Speichern angenommen wird; er zeichnet keine Spalten. Eine Spalte, die in den Einstellungen nicht markiert ist, bleibt für jede Rolle außer Administrator verborgen, was auch immer der Filter zurückgibt. Markieren Sie also die Spalten, die eine dieser Rollen braucht, und schränken Sie sie im Filter pro Rolle ein. Forenantworten schlagen oft einen Filter vor, der einfach 1 zurückgibt. Das lässt nicht erlaubt zwar verschwinden, erlaubt aber jeder Rolle, die den Editor öffnen kann, jedes sichtbare Feld zu ändern, und das wollten Sie meist nicht erlauben.

Stattdessen eine Rolle einschränken

Die Snippets in diesem Abschnitt gehören ebenfalls in die functions.php des Child-Themes oder in ein Code-Snippets-Plugin.

  • Nur Lesezugriff für alle außer Administratoren. Geben Sie für jedes Feld 0 aus woobe_user_can_edit zurück. Rollen in der Spezialliste werden nie gefragt, daher bearbeiten Administratoren weiter.
    add_filter( 'woobe_user_can_edit', function ( $can_edit, $field_key, $visibility ) {
        return 0;
    }, 10, 3 );
  • Kein Veröffentlichen. Entfernen Sie den Haken bei sichtbar für den Shop-Manager unter der Spalte Status. Die Rolle kann dann den Produktstatus weder in der Tabelle noch in der Massenbearbeitung ändern.
  • Tabs ausblenden. woobe_show_tabs erhält den Tab-Slug: settings, bulk, filters, export, history, meta oder info (der Hilfe-Tab). Prüfen Sie darin die Rolle, sonst verschwinden die Tabs auch für Administratoren.
    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 );
  • Kein Löschen. Dafür gibt es keine Option: Das Löschen von Produkten in BEAR erfordert dieselben Rechte wie das Bearbeiten, und der WordPress-Papierkorb nimmt auf, was gelöscht wird. Damit die Löschen-Schaltflächen für alle unterhalb von Administrator nicht funktionieren, lehnen Sie die beiden Lösch-Anfragen ab, bevor BEAR sie verarbeitet:
    // 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 );
    }
  • Nur eigene Produkte. Die Option Verkäufer-Rollen (Vendor roles) im Einstellungen-Tab nimmt Rollen-Slugs entgegen; Benutzer mit diesen Rollen sehen und bearbeiten nur die Produkte, die sie selbst verfasst haben.
  • Überhaupt kein Bulk-Editor. Das Entfernen von manage_woocommerce aus einer Rolle nimmt ihr den Editor weg, und das WooCommerce-Menü gleich mit. Um nur BEAR allen unterhalb von Administrator zu entziehen, entfernen Sie seinen Menüeintrag und lehnen die Seite selbst ab, denn ein entfernter Menüeintrag allein hält niemanden auf, der die Adresse direkt öffnet:
    // 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 ) );
        }
    } );

Team-Setups: gemeinsame Einstellungen, Profile und Verlauf

Jedes Konto hat seine eigenen BEAR-Einstellungen (aktive Spalten, ihre Reihenfolge, Optionen) und seine eigenen Spalten- und Filterprofile. Zwei Personen können gleichzeitig arbeiten, ohne die Ansicht der anderen zu verändern, wie das Team-FAQ beschreibt. Sollen stattdessen alle dasselbe Setup sehen, lässt ein Filter alle Konten eine einzige Konfiguration lesen und schreiben:

// 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';
} );

Die gemeinsame Konfiguration beginnt mit den Standardwerten, richten Sie die Spalten daher einmal ein, nachdem Sie den Filter hinzugefügt haben. Sie enthält die Einstellungen, nicht die Rollenregeln: Die Schalter sichtbar für den Shop-Manager gelten weiterhin.

Profile sind davon getrennt. Die Option Manager-Profile synchronisieren (Synchronize managers profiles) (Allgemeine Einstellungen, nur für Administratoren) lässt alle Konten außer Administratoren einen gemeinsamen Satz von Spalten- und Filterprofilen verwenden; Administratoren behalten immer ihre eigenen. Die Option wird mit den Einstellungen des Kontos gespeichert, das sie speichert, und jeder Benutzer liest seine eigenen Einstellungen, daher übernehmen Manager sie, wenn die Konten über woobe_settings_key_options eine Konfiguration teilen. Profile, die vor dem Einschalten gespeichert wurden, bleiben beim Konto, das sie angelegt hat; legen Sie die gemeinsamen neu an. Ein Profil lässt sich nicht erneut speichern: Legen Sie ein neues an und löschen Sie das alte.

In einem Multisite-Netzwerk hat jede Website ihre eigenen BEAR-Einstellungen, Profile und Rollenregeln; zwischen den Websites wird nichts geteilt. Ein Super-Admin, der auf einer Website keine Rolle hat, gilt dort als Administrator.

Der Verlauf folgt derselben Linie. Seit Version 2.2.4 hält jede Zeile fest, wer die Änderung vorgenommen hat und ob sie von Hand oder über den KI-Assistenten erfolgte. Administratoren und Rollen, die mit woobe_permit_special_roles hinzugefügt wurden, sehen die Änderungen aller und können sie zurücksetzen; andere Benutzer sehen und setzen nur ihre eigenen zurück. Mehr dazu in der Dokumentation zum Verlauf.

Wenn ein Shop-Manager weiterhin „nicht erlaubt“ erhält

  1. Laden Sie die Editor-Seite neu; eine viele Stunden lang geöffnete Seite sendet ein abgelaufenes Sicherheits-Token.
  2. Öffnen Sie als Administrator die Einstellungen, setzen Sie den Haken bei sichtbar für den Shop-Manager unter dem Feld und klicken Sie auf Alle Einstellungen speichern, auch wenn er schon gesetzt aussieht.
  3. Prüfen Sie die Rolle in einem Rollen-Editor-Plugin: Sie braucht manage_woocommerce und, um Produkte anderer Autoren zu ändern, edit_others_products.
  4. Suchen Sie nach eigenen Snippets mit woobe_user_can_edit, die 0 zurückgeben, und bestätigen Sie, dass der Rollen-Slug in woobe_permit_special_roles so geschrieben ist, wie die Rolle wirklich heißt.
  5. Ist ein Administrator betroffen, legen Sie ein neues Administratorkonto an und wiederholen Sie die Bearbeitung. Funktioniert das neue Konto, trägt das alte eine zusätzliche Rolle oder bearbeitete Berechtigungen.

Erklärt nichts davon das Problem, beschreiben Sie im BEAR-Support-Forum die Rolle, das Feld und was die Zelle zeigt.