Custom Post Type wird im Bulk Editor nicht angezeigt: So beheben Sie es
Ein Custom Post Type, der im Bulk Editor nicht angezeigt wird, ist fast immer ein Beitragstyp, den sein Plugin als nicht öffentlich registriert hat. WOLF füllt das Dropdown für Beitragstypen nur mit öffentlichen Beitragstypen: Beiträge und Seiten sind dort, Medien ebenfalls, die Kursgruppen, Buchungen oder Menüeinträge eines Plugins dagegen nicht, obwohl das Plugin ihnen in wp-admin eine eigene Listenansicht gibt. Ein einziger Filter nimmt sie auf. Nachfolgend erfahren Sie, warum das passiert, welchen Code Sie verwenden, was er verändert und wie die Felder des neuen Typs in die Tabelle gelangen.
Warum ein Custom Post Type im Bulk Editor nicht angezeigt wird
Jeder Beitragstyp wird mit einer Reihe von Flags registriert. Das Flag public legt fest, ob die Einträge im Frontend sichtbar sein sollen: mit eigenen URLs, Archiven und Suchergebnissen. Plugins für Buchungen, Kurse, Restaurants, Verzeichnisse und Formulare setzen es für ihre internen Daten oft auf false, denn ein Buchungsdatensatz oder eine Kursgruppe soll keine öffentliche Seite haben. Die Einträge erhalten trotzdem eine Admin-Ansicht, sodass der Typ in wp-admin wie jeder andere Custom Post Type aussieht.
WOLF erstellt seine Liste mit get_post_types(array('public' => true)). Dieselbe Liste speist die Umschaltung der Beitragstypen im Werkzeugbereich des Beitragseditors und die Optionen der Spalte Beitragstyp (Post type), deshalb fehlt ein nicht öffentlicher Typ an beiden Stellen.
Um zu prüfen, ob das bei Ihnen der Fall ist, öffnen Sie die Listenansicht des Plugins. Endet die Adresse auf edit.php?post_type=course_group (oder einen anderen Slug), sind die Einträge Beiträge dieses Typs, und genau dieser Slug wird von WOLF benötigt. Den Slug in Beitragstypen für Website-Redakteure (Site editors post types) einzutragen, fügt ihn nicht hinzu: Diese Einstellung schränkt die Liste nur für Benutzer ohne Administratorrechte ein, sie erweitert sie nie.
Nicht öffentliche Beitragstypen mit wpbe_post_type_args anzeigen
Die Argumente dieser Abfrage laufen durch den Filter wpbe_post_type_args. Die sauberste Änderung besteht darin, jeden Beitragstyp aufzulisten, der eine Admin-Ansicht hat, ob öffentlich oder nicht:
/*
* WOLF: list every post type that has an admin screen,
* including non-public types registered by plugins.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('wpbe_post_type_args', function ($args) {
return array('show_ui' => true);
});
Laden Sie die WOLF-Seite neu und öffnen Sie die Umschaltung der Beitragstypen: Der fehlende Typ steht jetzt in der Liste, neben Beiträgen, Seiten und Medien. Auch einige WordPress-Typen mit eigener Bearbeitungsansicht, etwa synchronisierte Muster (wp_block), erscheinen dort; wählen Sie sie einfach nicht aus.
Fehlt der Typ weiterhin, hat sein Plugin ihn ohne die Standard-Admin-Ansicht registriert und verwaltet die Einträge auf eigenen Seiten. Heben Sie in diesem Fall die Einschränkung vollständig auf:
/*
* WOLF: list all registered post types.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('wpbe_post_type_args', function ($args) {
unset($args['public']);
return $args;
});
Damit wird alles aufgelistet, auch WordPress-Interna wie revision, nav_menu_item und customize_changeset. Lassen Sie diese in Ruhe: Sie sind keine Inhalte, und Massenänderungen daran können Menüs oder Revisionen beschädigen.
Möglicherweise stoßen Sie auch auf das Snippet return array('public' => false);. Es wirkt umgekehrt: Es listet nur die nicht öffentlichen Typen auf, sodass Beiträge und Seiten aus dem Dropdown verschwinden, bis Sie es entfernen. Verwenden Sie es nur, wenn Sie in WOLF sonst nichts bearbeiten.
Was der Filter ändert und was nicht
- Er ändert nur die Liste der Beitragstypen auf der WOLF-Seite. Der Beitragstyp selbst bleibt unberührt: Er wird nicht öffentlich, erhält keine Frontend-URLs und erscheint weder in Suchergebnissen noch in Sitemaps.
- WOLF liest den Filter spät im Hook
init, daher funktionieren sowohl die functions.php des aktiven (Child-)Themes als auch Code-Snippets-Plugins. - Die erweiterte Liste wird auch von der Spalte Beitragstyp (Post type) verwendet, mit der sich ein Beitrag in einen anderen Typ verschieben lässt. Verschieben Sie keine Inhalte in einen Typ, den Sie nur zum Bearbeiten hinzugefügt haben.
Die Felder des neuen Beitragstyps als Spalten hinzufügen
Der Beitragstyp eines Plugins besteht größtenteils aus Meta-Feldern: Datumsangaben, Preise, Kapazitäten, Einstellungen. Sie sind keine Spalten, solange Sie sie nicht hinzufügen.
- Wählen Sie den neuen Typ in der Umschaltung der Beitragstypen des Beitragseditors aus.
- Öffnen Sie in wp-admin einen Eintrag dieses Typs, bei dem alle Felder ausgefüllt sind, und notieren Sie dessen ID (die Zahl nach
post=in der Adresse). - Geben Sie auf dem Tab Meta-Felder (Meta Fields) die ID unter Meta-Schlüssel aus einem beliebigen Beitrag per ID abrufen (Get meta keys from any post by its ID) ein und klicken Sie auf Abrufen (Get). WOLF listet jeden Meta-Schlüssel auf, der bei diesem Eintrag gespeichert ist.
- Löschen Sie die Schlüssel, die Sie nicht brauchen, vergeben Sie für die übrigen lesbare Titel (der Titel wird zur Spaltenüberschrift) und wählen Sie für jeden die Ansicht und den Typ: number für numerische Werte, checkbox für Werte 1/0, array für serialisierte Daten. Klicken Sie auf Meta-Felder speichern (Save meta fields).
- Geben Sie auf dem Tab Einstellungen (Settings) die Titel in die Spaltensuche (columns finder) ein, aktivieren Sie die Spalten, ziehen Sie sie in die gewünschte Reihenfolge und klicken Sie auf Alle Einstellungen speichern (Save all settings).
Ist in den allgemeinen Einstellungen Spalten und Meta-Felder für Beitragstypen trennen (Separate columns and meta for post types) auf Ja (Yes) gesetzt, hat jeder Beitragstyp eine eigene Liste von Meta-Feldern und einen eigenen Spaltensatz. Wählen Sie zuerst den Typ aus und fügen Sie dann seine Meta-Felder hinzu; andernfalls werden sie dem zuvor ausgewählten Typ zugeordnet.
Die Dokumentation zu Meta-Feldern erklärt die Ansichten und Typen, und die Massenbearbeitung serialisierter Meta-Daten behandelt Felder, die Arrays speichern. Filtern und Massenbearbeitung funktionieren dann wie bei jedem anderen Typ, wie unter Massenbearbeitung von Custom Post Types beschrieben.
Redakteure und andere Benutzer ohne Administratorrechte sehen ihn weiterhin nicht
Benutzer, die keine Administratoren sind, erhalten nur die Beitragstypen, die unter Einstellungen (Settings) → Beitragstypen für Website-Redakteure (Site editors post types) aufgeführt sind. Tragen Sie den Slug dort kommagetrennt und ohne Leerzeichen ein, zum Beispiel post,page,course_group, und klicken Sie auf Alle Einstellungen speichern (Save all settings). Die Einstellung kann nur aus der Liste wählen, die der Filter erzeugt hat, daher brauchen Sie für einen nicht öffentlichen Typ weiterhin den Filter. Sieht ein Redakteur die Meldung No any post type permitted to edit for site editors, lesen Sie wie WOLF entscheidet, welche Beitragstypen ein Benutzer bearbeiten darf.
Wenn der Beitragstyp weiterhin nicht erscheint
- Der Code wird nicht ausgeführt. Das Snippet ist inaktiv, oder es steht in der functions.php eines Themes, das nicht aktiv ist (zum Beispiel im Parent-Theme, obwohl ein Child-Theme aktiv ist).
- Die Einträge sind keine Beiträge. Lautet die Listenansicht des Plugins
admin.php?page=…stattedit.php?post_type=…, speichert das Plugin seine Datensätze oft in eigenen Datenbanktabellen. Solche Datensätze sind keine Beiträge, und kein Beitragseditor kann sie auflisten. - Der Typ ist aufgelistet, aber die Tabelle zeigt weiter Beiträge. WOLF stellt den Beitragstyp zurück, wenn es Ihr Konto als Website-Redakteur behandelt, was auch Administratoren passiert, deren Rollen ein Rollenverwaltungs-Plugin verändert hat. Der oben verlinkte Artikel über Website-Redakteure zeigt, wie Sie das Konto prüfen.
Ist der Typ als Beitragstyp registriert und erscheint trotz aktivem zweiten Snippet nicht, eröffnen Sie ein Thema im WOLF-Support-Forum und nennen Sie den Slug des Beitragstyps sowie das Plugin, das ihn registriert.