WOLF
Ein Editor im Tabellenstil zum Massenbearbeiten, Filtern, Exportieren und Zurücknehmen von Beiträgen, Seiten und jedem benutzerdefinierten Post-Typ.
- Erstveröffentlichung
- Aktive Installationen
- 4.000+
- Bewertung
- Rezensionen lesen
Über mich
WOLF (früher WPBE) ist das Gegenstück zum WooCommerce-Bulk-Editor BEAR für Beiträge. Es zeigt Beiträge jedes registrierten Post-Typs in einer bearbeitbaren Tabelle, lässt den Benutzer sie nach Kernfeldern, Taxonomien und Meta filtern und die gesamte gefilterte Menge dann in einem Vorgang ändern, löschen oder exportieren.
Schwierig ist, dass nichts feststeht. Jeder Post-Typ bringt eigene Taxonomien und Meta-Keys mit, Meta-Werte können serialisierte Arrays, ID-Listen von Bildern oder Flags mit eigenen Werten sein, und die Zielmenge kann aus Tausenden Beiträgen auf Shared Hosting mit kurzen PHP-Zeitlimits bestehen.
Das Plugin beantwortet das mit einer Feld-Registry, die pro Post-Typ neu aufgebaut wird, einem Filter, der auf dem Server gespeichert und zu einer einzigen WP_Query kompiliert wird, vom Browser gesteuerten Bulk-Durchläufen in Batches fester Größe und einem History-Log, das den vorherigen Wert jedes Feldes festhält, bevor es geschrieben wird, sodass sich auch ein Bulk-Durchlauf batchweise zurücknehmen lässt.
Die Premium-Version und die kostenlose Version auf wordpress.org teilen sich eine Codebasis; ein einziges Flag schaltet die Beschränkungen der kostenlosen Version ein.
WOLF · Massenbearbeitung für Beiträge
was gelöst wurde
Ein Editor für jeden Post-Typ
shipped · 2019Was es bringtMitarbeitende bearbeiten jede Art von Inhalt in einer Tabelle, die auch auf großen Websites schnell bleibt, mit Spalten, die pro Person und pro Sprache eingerichtet sind.
- Problem
- Beiträge, Seiten und benutzerdefinierte Post-Typen haben unterschiedliche Taxonomien, Meta-Keys und anwendbare Kernfelder. Eine Tabelle muss jeden davon zeigen und auf Websites mit vielen Datensätzen schnell bleiben.
- Lösung
Eine Feld-Registry wird für den aktiven Post-Typ neu aufgebaut, und die Tabelle läuft im serverseitigen Modus von DataTables über WP_Query, sodass jeder Request eine Seite Beiträge liest.
- Stack
Jeder Post-Typ bringt seine eigenen Taxonomien mitTaxonomiespalten werden aus get_object_taxonomies() für den aktiven Post-Typ aufgebaut
WPBE_SETTINGS::get_fields() führt die statische Feldliste aus data/fields.php mit je einer Spalte pro für den aktuellen Post-Typ registrierter Taxonomie zusammen und wendet dann die gespeicherte Spaltenreihenfolge und die Titel des Benutzers an. Neue Felder, die später auftauchen (eine neue Taxonomie, ein neuer Meta-Key), werden angehängt, statt verloren zu gehen.
Felddefinitionen tragen allow_post_types und prohibit_post_types. wrap_field_val() liefert eine Zelle „restricted“, wenn ein Feld nicht zutrifft, zum Beispiel Status- und Kommentarfelder bei Anhängen, MIME-Typ nur bei Anhängen, Sticky nur bei Beiträgen. Anhänge werden mit dem zusätzlichen Status 'inherit' abgefragt.
Große Websites können nicht jeden Beitrag in den Browser ladenServerseitiges DataTables: Jede Seite, Sortierung und Suche ist eine paginierte WP_Query
Die Tabelle ist mit serverSide: true konfiguriert und ruft wpbe_get_posts mit den Paginierungsparametern von DataTables auf. WPBE_POSTS::gets() wandelt start/length in paged/posts_per_page um und schaltet auf die Sortierung nach meta_value_num um, wenn die Sortierspalte ein numerisches Meta-Feld oder ein Datums-Meta-Feld ist.
Die Zeilen pro Seite sind auf 100 begrenzt, mit dem Code-Kommentar „to avoid 500 error on weak servers“. Die kostenlose Version begrenzt auf 10.
Der Editor-Code darf den Rest von wp-admin nicht verlangsamenErweiterungen und Modelle laden nur auf der Editor-Seite und bei wpbe_*-AJAX-Actions
init() führt zuerst eine Rollenprüfung aus und dann is_should_init(), das nur für page=wpbe oder eine AJAX-Action, deren Name 'wpbe_' enthält, true liefert. Auf anderen Admin-Bildschirmen werden nur der Menüeintrag, der Button in der Admin-Leiste und Hinweise registriert.
Erweiterungen folgen einer Namenskonvention (ext/<slug>/<slug>.php, Klasse WPBE_<SLUG>) und erhalten Storage, Einstellungen und das Posts-Modell über init_vars(). Derselbe Loader findet auch Erweiterungen von Drittanbietern in wp-content/wpbe_ext.
Jeder Benutzer braucht eigene Spalten, bei Bedarf pro Post-TypOptionen pro Benutzer-ID gespeichert, wahlweise pro Post-Typ aufgeteilt (Premium-Einstellung)
Einstellungen liegen in der Option wpbe_options_<user_id>. Ist der Schalter „separate settings“ an, wird der Post-Typ an den Key angehängt, und die Liste der registrierten Meta-Felder wird auf dieselbe Weise pro Post-Typ aufgeteilt. Der aktive Post-Typ wird pro Benutzer im Plugin-Storage gemerkt.
Der Schalter ist in der kostenlosen Version deaktiviert.
Auf WPML-Websites muss der Editor in der aktuellen Admin-Sprache arbeitenAktuelle WPML-Sprache wird in jede Abfrage übergeben; Sticky-Liste pro Sprache geführt
Ist SitePress vorhanden, liefert der Filter wpbe_current_language ICL_LANGUAGE_CODE, gets() ruft vor dem Aufbau von WP_Query $sitepress->switch_lang() auf, und die Option der Sticky-Beiträge wird unter sticky_posts_<lang> gelesen und geschrieben.
Bulk-Bearbeiten, -Löschen und -Exportieren in Batches
shipped · 2019Was es bringtÄnderungen an Tausenden Beiträgen laufen auf gewöhnlichem Hosting zuverlässig durch, mit sichtbarem Fortschritt und der Möglichkeit, mittendrin abzubrechen.
- Problem
- Tausende Beiträge in einem PHP-Request zu bearbeiten stößt an Zeit- und Speichergrenzen, und der Benutzer braucht Fortschrittsanzeige und eine Möglichkeit, den Durchlauf anzuhalten.
- Lösung
Der Browser steuert den Durchlauf in Batches fester Größe von Beitrags-IDs; die Operation selbst wird einmal unter einem zufälligen Bulk-Key auf dem Server gespeichert.
- Stack
Ein PHP-Request kann nicht Tausende Beiträge bearbeitenIDs einmal ermittelt, dann in Batches zu 50 an einen zustandslosen Worker-Endpunkt gesendet
wpbe_bulk_posts_count speichert das Bulk-Formular unter 'wpbe_bulk_<key>' (16 im Browser erzeugte Zufallszeichen) und gibt die IDs zurück, die zum aktuellen Filter passen, mit fields=ids und no_found_rows. Der Browser zerlegt diese Liste in Batches zu 50 und sendet sie nacheinander an wpbe_bulk_posts, wobei er eine Fortschrittsanzeige und einen Indikator in der Admin-Leiste aktualisiert. Abbrechen bricht den ausstehenden XHR ab; wpbe_bulk_finish gibt die gezählte Gesamtzahl zurück.
Bulk-Löschen nutzt dasselbe Muster mit Batches zu 10 und wp_trash_post(), sodass gelöschte Beiträge aus dem Papierkorb wiederherstellbar bleiben.
Nach einem Durchlauf zeichnet der Browser nur die berührten Zeilen neu, wenn vier oder weniger Beiträge geändert wurden, andernfalls die aktuelle Seite.
Textfelder brauchen Änderungen relativ zum aktuellen WertAnhängen, Voranstellen, Ersetzen (mit oder ohne Groß-/Kleinschreibung), neu setzen; Makros pro Beitrag
__process_text_data() liest den aktuellen Wert jedes Beitrags und wendet das gewählte Verhalten an. Werte können {TITLE}, {ID}, {MENU_ORDER} und {meta:key} enthalten, pro Beitrag aufgelöst, sowie Groß-/Kleinschreibungs-Makros wie {DO_STRING_UP} oder {DO_STRING_TITLE}, die mb_*-Funktionen nutzen, sodass auch nicht-lateinische Titel verarbeitet werden.
Numerische Metadaten brauchen relative Änderungen und preisähnliche RundungNach Wert oder Prozent, Formel mit einem anderen Meta-Key, Zufallsbereich, Rundung auf .05, .10 oder .x9
__process_number_data() unterstützt Erhöhen/Verringern um Wert oder Prozent und verknüpft das Ergebnis dann optional mit einem anderen Meta-Feld desselben Beitrags (+, -, *, /, wobei die Division durch null durch 1 ersetzt wird) sowie mit einer Zufallszahl aus einem Bereich, skaliert mit einem Dezimalfaktor.
Das Runden des Bruchteils auf Schritte von .05 oder .10 oder auf eine Endung wie .99 geschieht in update_page_field() in der konfigurierten Zahl von Dezimalstellen; Cent-Werte werden über einen ganzzahligen Schritt umgerechnet, weil Float-Modulo falsche Ergebnisse liefert.
Hierarchische und flache Taxonomien brauchen unterschiedliche Term-EingabenTerm-IDs für hierarchische Taxonomien, Term-Slugs einzeln für flache
WordPress erwartet IDs für hierarchische Taxonomien und Namen oder Slugs für Tag-artige. Der Bulk-Worker prüft is_taxonomy_hierarchical(); für flache Taxonomien wandelt er jede ID in einen Slug um, und bei „replace“ schreibt er den ersten Term mit append=false und die übrigen mit append=true. „Remove“ nutzt wp_remove_object_terms().
Der History-Hook wird vor Term-Änderungen von Hand ausgelöst, weil dieser Pfad update_page_field() umgeht.
Exporte großer Auswahlen stoßen an dieselben GrenzenCSV pro Batch zu 10 per fputcsv angehängt; XML im WordPress-WXR-Format geschrieben
Der Zählschritt schreibt die Kopfzeile; jeder Batch hängt Zeilen mit fputcsv() an eine im Modus a+ geöffnete Datei an. Der Code merkt an, dass WP_Filesystem kein zeilenweises Anhängen kennt, weshalb hier rohe Dateifunktionen verwendet werden.
Der XML-Export baut ein RSS-Dokument mit den WXR-1.2-Namespaces (wp:, content:, excerpt:), Terms als <category domain nicename> und Meta als wp:postmeta mit CDATA, sodass die Datei dem Format des WordPress-Exporters folgt. Dateinamen tragen Exportdatum und Minute, und Dateien, die älter als zwei Tage sind, werden durch eine mit einem Transient gedrosselte Prüfung gelöscht.
Filtern nach Feldern, Terms und Meta
shipped · 2019Was es bringtMitarbeitende wählen genau die Beiträge aus, die sie wollen, nach Feldern, Kategorien, eigenen Werten oder eingefügten ID-Listen, und Änderungen und Exporte gelten für dieselbe Auswahl.
- Problem
- Bulk-Bearbeiten und Export gelten für alles, was der Filter trifft. Deshalb muss der Filter viele Feldbedingungen in eine korrekte WP_Query überführen und über getrennte AJAX-Requests und Browser-Tabs hinweg identisch bleiben.
- Lösung
Der Filterzustand wird auf dem Server unter einem zufälligen Key pro Tab gespeichert und in einem Hook, den jede Abfrage nutzt, zu tax_query-, meta_query- und posts_where-Klauseln kompiliert.
- Stack
Tabellen-, Bulk- und Export-Requests müssen denselben Filter sehenFilter serverseitig unter einem 16 Zeichen langen Key gespeichert, der pro Browser-Tab erzeugt wird
Der Browser erzeugt wpbe_filter_current_key, wenn ein Filter angewendet wird, und sendet ihn mit jedem Request; der Kommentar im Quelltext sagt, dass dies Bulk-nach-Filter in verschiedenen Tabs erlaubt. wpbe_apply_query_filter_data() liest den gespeicherten Filter und wird innerhalb von WPBE_POSTS::gets() angewendet, sodass die Bulk-ID-Liste vom selben Code aufgebaut wird wie die sichtbare Tabelle.
Alle von mehreren Terms zugleich zu treffen erfordert eine tax_query-Klausel pro TermAND in eine tax_query-Klausel pro Term aufgeteilt; EXISTS und NOT EXISTS ergänzt
Beim Operator AND wird jeder gewählte Term zu einer eigenen Klausel, verbunden durch die äußere Relation AND, was der im Code-Kommentar genannte Workaround ist. Andere Operatoren (IN, NOT IN) reichen die Term-Liste unverändert durch. include_children wird über einen Filter gesteuert statt über den WordPress-Standard.
Numerische Meta-Bereiche brauchen einen DECIMAL-Cast mit expliziter SkalaBETWEEN mit DECIMAL(30,20)-Cast; einseitige und gleiche Grenzen behandelt
Der Code-Kommentar nennt den Fall: Bei DECIMAL ohne Genauigkeit lieferte eine Suche von 100 bis 150 auch 99.xx. Der Filter verwendet DECIMAL(30,20), schaltet auf >= um, wenn nur „von“ gesetzt ist, und auf =, wenn beide Grenzen gleich sind. Datums-Meta läuft zuerst durch normalize_calendar_date().
Ein leerer Meta-Wert kann '' sein oder eine fehlende Zeile„Empty“ wird zu value = '' OR NOT EXISTS kompiliert; „not empty“ zu value != ''
Beiträge, die vor der Einführung eines Meta-Keys erstellt wurden, haben gar keine Zeile, sodass eine reine Gleichheitsprüfung sie verfehlt. Das Verhalten „empty“ erzeugt eine verschachtelte meta_query mit Relation OR.
Die Textsuche braucht OR, AND und NOT ohne rohes SQLKleine Syntax (^ für OR, ~ für AND, ! für NOT), zu vorbereitetem REGEXP kompiliert
posts_txt_where() wandelt die Eingabe in Kleinbuchstaben um, teilt an ^ und baut LOWER(column) REGEXP / NOT REGEXP-Bedingungen mit den Modi begin, end, exact und not. Jeder Wert wird über $wpdb->prepare() gebunden, und die Spalte muss in einer Allowlist von fünf wp_posts-Spalten stehen.
Benutzer fügen ID-Listen und Bereiche einEingaben wie '12,40-55' werden zu post__in expandiert
Kommagetrennte Einträge gelten als IDs; ein Eintrag mit Bindestrich wird unabhängig von der Reihenfolge zum vollständigen Bereich expandiert. Datums- und Zahlenbereiche auf wp_posts-Spalten (menu_order, post_parent, Beitragsdaten) laufen über einen separaten posts_where-Filter mit einer Spalten-Allowlist.
History und Rollback
shipped · 2019Was es bringtEine falsche Bulk-Änderung lässt sich in einem Schritt rückgängig machen, statt Tausende Beiträge von Hand zu korrigieren.
- Problem
- Eine falsche Bulk-Änderung an Tausenden Beiträgen ist schwer rückgängig zu machen: WordPress-Revisionen decken weder Meta noch Terms noch die meisten Kernfelder ab, und das Zurücknehmen selbst kann so groß sein wie die Änderung.
- Lösung
Jedem Feldschreiben geht eine Log-Zeile mit dem vorherigen Wert voraus; Zeilen eines Bulk-Durchlaufs teilen sich dessen Key und werden batchweise zurückgesetzt.
- Stack
Den alten Wert jedes Feldtyps festhalten, bevor er sich ändertEin Hook vor jedem Schreiben speichert den vorherigen Wert in wp_wpbe_history
write() hängt an wpbe_before_update_page_field, das update_page_field() vor jedem Schreiben auslöst; der Bulk-Taxonomie-Pfad, der Terms direkt schreibt, löst es von Hand aus. Taxonomiewerte werden als JSON-Liste von Term-IDs gespeichert, Array-Meta als JSON (mit JSON_HEX_QUOT und JSON_HEX_TAG für den Editor serialisierter Metadaten), Skalare unverändert. Jede Zeile hat user_id und post_type sowie den Bulk-Key, wenn sie Teil eines Durchlaufs ist.
Tausende Änderungen müssen eine einzige umkehrbare Operation bildenKopftabelle wpbe_history_bulk pro Durchlauf: Keys, Beitragsanzahl und Status
start_bulk() fügt die Kopfzeile mit der Liste der bearbeiteten Felder als JSON ein; jeder Batch addiert seine Größe über UPDATE posts_count = posts_count + %d; finish_bulk() markiert den Durchlauf als completed. Ein vom Benutzer abgebrochener Durchlauf behält den Standardstatus 'terminated', sodass die Liste ihn als unvollständig zeigt. Beide Tabellen werden mit dbDelta und dem Zeichensatz der Website angelegt, auf bulk_key und user_id indiziert und bei der Deinstallation gelöscht.
Das Zurücknehmen eines großen Durchlaufs stößt an dieselben ZeitlimitsRücknahme in Portionen zu 10 Zeilen pro Request; Kopfzeile am Ende entfernt
Der Browser fragt die Zeilenanzahl des Bulk-Keys ab und ruft dann wpbe_history_revert_bulk_portion wiederholt mit limit 10 und einer Fortschrittsanzeige auf. Jede zurückgesetzte Zeile wird gelöscht, sodass die nächste Portion die übrigen aufnimmt; die Kopfzeile wird gelöscht, wenn der Zähler die Gesamtzahl erreicht.
Eine Rücknahme darf sich nicht selbst als neue Änderung protokollierenremove_all_actions() auf dem Logging-Hook vor dem Schreiben alter Werte
revert() koppelt den History-Writer ab, dekodiert den gespeicherten Wert nach Feldtyp (Term-ID-Listen, JSON-Meta-Arrays) und schreibt ihn über dasselbe update_page_field() zurück, das für Änderungen genutzt wird, sodass save_post und edit_post bei einer Rücknahme genauso feuern wie bei einer Änderung.
Einzeländerungen und Bulk-Durchläufe müssen in einer Zeitleiste erscheinenEinzelzeilen und Bulk-Köpfe zusammengeführt und nach Zeit sortiert, pro Benutzer und Post-Typ
get_history() liest die Einzelzeilen und die Bulk-Köpfe des aktuellen Benutzers und Post-Typs, führt sie zusammen und sortiert sie nach Zeit, neueste zuerst, sodass eine Liste beide Arten von Änderungen zeigt.
Die kostenlose Version zeigt die zwei neuesten Einträge und bereinigt ältere Einzelzeilen und Bulk-Köpfe, wenn die Liste geöffnet wird.
Meta-Felder und strukturierte Inhalte
shipped · 2019Was es bringtBenutzerdefinierte Daten wie Listen, Flags und Bildergalerien lassen sich sicher bearbeiten, ohne sie zu zerstören, auch wenn die Mitarbeitenden nicht wissen, wie sie gespeichert sind.
- Problem
- Benutzerdefinierte Post-Typen halten die meisten ihrer Daten in postmeta, oft als serialisierte Arrays, Listen von Bild-IDs oder Flags mit website-spezifischen Werten, die eine einfache Textzelle beschädigen würde.
- Lösung
Meta-Keys werden mit einem Typ und einer Bearbeitungsansicht registriert, und jede Ansicht hat ihren eigenen Reader, Writer, Filter und Bulk-Handler.
- Stack
Admins wissen nicht, welche Meta-Keys ein Post-Typ verwendetKeys aus einem Beispielbeitrag gelesen; registrierte Keys werden zu Spalten, Filtern, Bulk-Feldern
wpbe_meta_get_keys gibt die Meta-Keys einer vom Admin eingegebenen Beitrags-ID zurück. Ein registrierter Key wird über die Hooks wpbe_extend_fields, wpbe_filter_* und wpbe_bulk_* eingespeist, sodass er gleichzeitig in der Tabelle, im Filter-Panel und im Bulk-Panel erscheint. Keys werden getrimmt, aber nicht in Kleinbuchstaben umgewandelt, weil Keys wie _woocs_sale_price_USD zwischen Groß- und Kleinschreibung unterscheiden.
Die kostenlose Version nutzt nur die ersten zwei registrierten Meta-Felder.
Serialisierte Arrays müssen sich bearbeiten lassen, ohne die Struktur zu zerstörenDer Popup-Builder sendet Key/Value-Arrays; der Server baut verschachtelte Arrays neu auf
Das Popup sendet keys[]/values[] für flache und verschachtelte Arrays und keys2[][]/values2[][] für Listen von Objekten. __process_jsoned_meta_data() baut das PHP-Array neu auf, dekodiert Werte, die gültiges JSON sind, und greift bei einfachen Strings auf den Rohwert zurück. update_post_meta() speichert es dann serialisiert, wie WordPress es erwartet. Derselbe Pfad wird vom Bulk-Worker genutzt.
Flags werden als 'yes'/'no' oder andere website-spezifische Paare gespeichertZuordnungsregeln 'key:on^off' übersetzen zwischen dem 1/0-Schalter und den gespeicherten Werten
over_switcher_swicher_to_val() und over_switcher_val_to_swicher() lesen einen Einstellungsstring wie 'dist:yes,stest:true' und wandeln in beide Richtungen um, sodass die Switcher-Oberfläche mit Werten funktioniert, die andere Plugins geschrieben haben.
Bildergalerien, die in Meta als Listen von Anhangs-IDs gehalten werdenMeta-Typ Galerie als kommagetrennte Liste von Anhangs-IDs gespeichert
Das Galerie-Popup sendet ein URL-kodiertes Formular; der Handler erkennt die Kodierung, parst es mit parse_str(), bereinigt es und speichert die IDs als kommagetrennten String. Der Bulk-Worker akzeptiert dasselbe Format.
Inhalte des Block-Editors lassen sich nicht in einer einfachen Textarea bearbeitenBeitrag im Block-Editor in einem iframe geöffnet; Inhalt über wp.data gelesen
Option „Use gutenberg“. Für Post-Typen, die den Block-Editor nutzen, lädt das Popup post.php mit wpbe_popup_editor=1; wp_editor_compatibility() blendet in diesem Frame die Steuerelemente zum Veröffentlichen und die Seitenleiste aus und stellt eine Funktion bereit, die wp.data.select('core/editor').getEditedPostContent() zurückgibt. Die übergeordnete Seite liest sie aus und speichert über das normale Feld-Update.
Zugriffskontrolle und Absicherung der Requests
shipped · 2023Was es bringtNur vertrauenswürdige Rollen können den Editor nutzen, Autoren arbeiten nur mit ihren eigenen Beiträgen, und Mitarbeitende sehen nur die Felder, die sie ändern dürfen.
- Problem
- Ein Werkzeug, das jedes Feld jedes Beitrags in Masse neu schreiben kann, ist ein lohnendes Ziel: Jeder AJAX-Endpunkt muss den Aufrufer prüfen, und Filtereingaben landen nahe an SQL.
- Lösung
Eine Rollenschranke, bevor irgendein Endpunkt registriert wird, Nonces bei Feld-, Bulk-, Werkzeug- und Einstellungsaktionen, Rechte auf Feldebene für Nicht-Admin-Rollen und vorbereitetes SQL mit Spalten-Allowlists.
- Stack
Nur vertrauenswürdige Rollen dürfen irgendeinen Editor-Endpunkt erreichenRollenprüfung in init() läuft, bevor ein wp_ajax_wpbe_*-Handler hinzugefügt wird
can_manage_data() erlaubt Administratoren, Redakteure und Rollen, die über den Filter wpbe_author_area_roles hinzugefügt wurden. Schlägt es fehl, kehrt init() zurück, bevor Erweiterungen laden, sodass die AJAX-Actions für diesen Benutzer nicht existieren. Feld-Updates, Bulk-Bearbeiten und Bulk-Löschen, das Werkzeug-Panel (erstellen, duplizieren, löschen, Terms), Meta-Einstellungen, das Optionsformular, die History-Liste und einzelne Rücknahmen prüfen zusätzlich eine Nonce.
Redakteure sollen nicht jedes Feld und jeden Post-Typ sehen oder ändernDer Admin legt Feldsichtbarkeit und erlaubte Post-Typen für Nicht-Admin-Rollen fest (Premium)
Für Nicht-Admin-Rollen entfernt get_fields() versteckte Spalten, sodass sie weder in der Tabelle noch im Bulk-Panel angeboten werden; update_page_field() prüft is_current_user_can_edit_field() und gibt für ein verstecktes Feld „forbidden“ zurück; filter_post_types() schränkt die Post-Typ-Auswahl ein, und der Konstruktor der Einstellungen verschiebt den Benutzer auf einen erlaubten Post-Typ. In der kostenlosen Version werden die Sichtbarkeits-Checkboxen deaktiviert dargestellt.
Autoren sollen nur mit ihren eigenen Beiträgen arbeitenAutorenbereich-Rollen erhalten in den Abfragen des Editors author=self und können post_author nicht ändern
Für Rollen, die über den Filter wpbe_author_area_roles hinzugefügt wurden, ergänzt WPBE_AUTHOR_AREA 'author' => aktuelle Benutzer-ID über den Abfragefilter, den die Tabelle, die Bulk-ID-Liste und der Export nutzen, sodass diese Listen nur die eigenen Beiträge des Benutzers zeigen. Sein Callback wpbe_user_can_edit blockiert post_author für diese Rollen.
Filtereingaben und kopierte Beitragsdaten landen in SQLSpaltennamen aus Allowlists, jeder Wert über $wpdb->prepare() gebunden
Text- und Bereichsfilter akzeptieren nur gelistete wp_posts-Spalten und binden Werte über prepare(). History-Abfragen binden Benutzer, Post-Typ und Bulk-Key und bauen NOT-IN-Listen aus array_fill()-Platzhaltern.
Das Duplizieren kopiert Terms per Slug und alle postmeta außer _wp_old_slug in einer einzigen Anweisung INSERT ... SELECT %d, %s, %s UNION ALL, jede Zeile mit prepare() gebaut, und setzt die Kopie dann auf Entwurf.
Inhaltsfelder müssen Einbettungen behalten, aber Skripte verwerfenwp_kses mit der Post-Allowlist plus einer engen iframe-Attributliste
wpbe_update_page_field() bereinigt Arrays rekursiv mit wp_kses und der Post-Allowlist. Für Inhalt, Auszug und Rich-Text-Felder fügt es iframe mit einer festen Menge an Attributen hinzu, damit Video-Einbettungen erhalten bleiben. Ein Filter kann für strengere Websites auf sanitize_text_field() umschalten.
Zahlen
wordpress.org- Aktive Installationen 4.000+ Zähler von wordpress.org.
- Rezensionen 27 Durchschnitt 4.7 von 5.
- Jahre Support 7 Seit 3. September 2019, letztes Update 12. Oktober 2026.