WordPress Admin-Listentabellen: Fügen Sie benutzerdefinierte Filter hinzu

Veröffentlicht: 2021-02-26

Die meisten Informationen auf Ihren Seiten und Beiträgen im WordPress-Adminbereich sind in Tabellen organisiert. Jeder, der WordPress verwendet, wird mit diesen vertraut sein. Sie funktionieren gut und ermöglichen es Ihnen, bestimmte Seiten- oder Beitragsinformationen schnell zu bearbeiten, das Datum anzuzeigen, an dem der Beitrag oder die Seite veröffentlicht wurde, und vieles mehr. Darüber hinaus haben Sie vielleicht bemerkt, dass Sie diese Tabellen mit einer Auswahl an Dropdown-Menüs filtern können, die oben in jeder Tabelle angezeigt werden.

Es gibt jedoch nur eine Handvoll Filter. Was tun Sie also, wenn Sie einen Wert filtern möchten, der kein Filterfeld im Admin hat? Glücklicherweise erlaubt uns WordPress, unsere eigenen Filter hinzuzufügen. Wir werden sehen, wie.

Warum benutzerdefinierte Filter verwenden ?

Warum genau benötigen Sie also benutzerdefinierte Filter zum Organisieren der Admin-Tabellen in WordPress? Stellen wir uns vor, wir haben eine Website mit einer großen Anzahl von Post-Autoren und vielen Posts.

Hosten Sie Ihre Website mit Pressidium

60- TÄGIGE GELD-ZURÜCK-GARANTIE

SEHEN SIE UNSERE PLÄNE

Sie können den Autor der Beiträge ohne Änderung in der Admin-Tabelle anzeigen. Was Sie derzeit nicht tun können, ist, Beiträge nach Autor zu sortieren. Dies ist natürlich eine erhebliche Einschränkung, wenn Sie in der Lage sein möchten, alle von einem bestimmten Autor verfassten Beiträge einfach anzuzeigen. Was helfen würde, wäre, wenn Sie ein Dropdown-Menü aller Beitragsautoren anzeigen und dann einen aus der Liste auswählen könnten. Das könnte die Sache wirklich beschleunigen.

Schauen wir uns an, wie wir das bauen könnten.

Erstellen unseres benutzerdefinierten Filters

Um Ihnen beim Erstellen Ihrer eigenen Filter zu helfen, stellt WordPress die Hooks „ restrict_manage_posts “ und pre_get_posts .

restrict_manage_posts “ wird in der Datei wp-admin/includes/class-wp-posts-list-table.php “ um Zeile 557 eingeführt und ausgelöst, bevor die Schaltfläche „Filter“ über der Admin-Tabellenliste erstellt wird.

Wir werden eine benutzerdefinierte Funktion verwenden und sie wie gewohnt mit dem Hook „ restrict_manage_posts “ verknüpfen (weitere Informationen dazu finden Sie hier). Gehen Sie zum Hauptordner Ihres aktiven Designs und öffnen Sie die Datei functions.php mit Ihrem bevorzugten Editor. Fügen Sie am Ende des Dateiinhalts den folgenden Code ein:

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

Die Hauptbedingung, die wir verwendet haben, ist if( $screen->id == 'edit-post') . Hier haben wir die WordPress-Funktion get_current_screen() verwendet, die die Bildschirm-ID zurückgibt, auf der wir uns befinden.

In diesem Fall lautet die Admin-Bildschirm-ID „edit-post“. Mit anderen Worten, wir stellen sicher, dass wir uns auf dem Bildschirm zur Verwaltung von Beiträgen befinden. Wenn wir dies beispielsweise auf den Seitenverwaltungsbildschirm anwenden wollten, sollten wir if( $screen->id == 'edit-page' verwenden oder wenn wir an einem benutzerdefinierten Beitragstyp arbeiten, wäre edit-{post_type} die richtige if-Anweisung.

Hinweis: Um zu sehen, welche ID jedem Admin-Bildschirm entspricht, können Sie die offizielle Dokumentation zur Admin-Bildschirm-Referenz einsehen.

Im folgenden Code prüfen wir, ob bereits ein Autor ausgewählt ist, und wenn ja, wenden wir den ausgewählten Wert an:

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Schließlich generieren wir durch die Verwendung der WordPress-Funktion wp_dropdown_users die Dropdown-Liste der Autoren gemäß den zuvor definierten Argumenten.

Als nächstes haben wir den Text ausgewählt, der die Option „show-all“ im Argument show_option_all . Wir haben die Zeichenfolge „Alle Autoren“ gewählt. Im Argument „Name“ geben wir den gewünschten Namen für die Dropdown-Liste ein. Wir werden diesen Wert später verwenden, um die Ergebnisse der Beitragsliste zu filtern.

Im Argument „Wer“ definieren wir, welche Art von Benutzern abgefragt werden sollen, in unserem Fall „Autoren“. Mit dem Argument ‚include_selected‘ wählen wir aus, ob wir die ausgewählte Benutzer-ID in die Dropdown-Liste aufnehmen möchten.

Wenn Sie an dieser Stelle den Bildschirm für Administratorbeiträge aktualisieren, sollten Sie das Dropdown-Menü des Autors neben den anderen integrierten Filtermenüs sehen.

Wenn Sie einen Wert auswählen und auf „Filter“ drücken, bleibt der Wert beim Neuladen der Seite ausgewählt, aber die Ergebnisse bleiben unverändert. In unserem nächsten Schritt werden wir die notwendigen Änderungen vornehmen, um die Beitragsliste so zu filtern, dass nur die Beiträge angezeigt werden, die mit dem von uns ausgewählten Autor verknüpft sind.

Filtern der Ergebnisse

Auch hier erledigt der Filter pre_get_posts die Arbeit. Diesen Hook haben wir in unserem Artikel WordPress Admin Search: Extending the Results untersucht. Wir werden dies erneut verwenden, um das Abfragevariablenobjekt zu ändern, das im Post-Admin-Bildschirm erstellt wird, bevor die eigentliche Abfrage ausgeführt wird. Fügen Sie in Ihrer functions.php die folgenden Zeilen ein:

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

Die Hauptbedingung ist auch hier wie zuvor erforderlich, um sicherzustellen, dass wir uns auf dem Bildschirm mit den Admin-Beiträgen befinden.

Die $author_id = sanitize_text_field($_GET['authors_admin_filter']); behält die ausgewählte Autoren-ID in der Variablen $author_id . Danach, und wenn die Autoren-ID nicht 0 ist (Alle Autoren sind ausgewählt), übergeben wir den Wert $author_id im Autorenparameter der Abfrage.

Und das ist es. Jetzt werden nur noch die Beiträge angezeigt, die zur ausgewählten Autor/Benutzer-ID gehören.

Fazit

Benutzerdefinierte Filter in den Admin-Bildschirmen können Ihre Inhalte für Admin-Benutzer leicht durchsuchbar machen, was von unschätzbarem Wert sein kann, wenn Sie viele Posts oder Seiten haben. Und das ist natürlich nur eine Möglichkeit, einen Filter in den Admin-Tabellen einzusetzen. Es gibt eine Menge alternativer Möglichkeiten, die Sie möglicherweise nützlich finden, und hoffentlich helfen Ihnen die hier beschriebenen Techniken, Ihre eigenen Filter zu erstellen.

Beispielsweise möchten Sie möglicherweise ein Dropdown-Filtermenü mit den Optionen zum Anzeigen von Posts erstellen, die in den letzten 30 Tagen erstellt wurden, oder vielleicht einen Filter, der Posts nach einer beliebigen Taxonomie sortiert. Die query_vars-Liste kann Ihnen beim Brainstorming möglicher Optionen helfen!.

Viel Spaß beim Herumspielen mit dieser großartigen Funktion!

Siehe auch

WordPress Admin-Listentabellen: Fügen Sie benutzerdefinierte Filter hinzu
Erste Schritte mit benutzerdefinierten WordPress-Feldern