Benutzerdefinierte Beitragstypen für WordPress Taxonomien, Admin-Spalten und Filter

Bevor Sie in dieses Tutorial eintauchen, machen Sie sich bitte mit meinem ersten Tutorial zu Custom Post Types durch, in dem ich einige wichtige Aspekte von CPTs (Custom Post Types) erläutert habe. In diesem Tutorial werden wir mehr über dieses wunderbare Feature in WordPress erfahren.

In diesem Lernprogramm erfahren Sie, wie Sie benutzerdefinierte Taxonomien, Verwaltungsspalten, Taxonomie-Filter und eine Archivseite für Ihr CPT erstellen. Also fangen wir an.


Benutzerdefinierte Taxonomie für benutzerdefinierte Beitragstypen

Taxonomien sind eine großartige Möglichkeit, Dinge zusammenzufassen und uns bei der Suche nach Beiträgen zu einer bestimmten Gruppe zu helfen. In WordPress verwenden wir im Allgemeinen Kategorien und Tags als Taxonomien. In den folgenden Schritten wird erläutert, wie Sie benutzerdefinierte Taxonomien für Ihr CPT erstellen.

Schritt 1: Registrieren Sie die benutzerdefinierte Funktion

Öffnen Sie in unserem Fall Ihre Plugin-Datei Movie-Reviews.php Fügen Sie den folgenden Code hinzu, um die benutzerdefinierte Funktion zu registrieren.

add_action ('init', 'create_my_taxonomies', 0);

Schritt 2: Implementierung der benutzerdefinierten Funktion und Registrieren der benutzerdefinierten Taxonomie

Funktion create_my_taxonomies () register_taxonomy ('movie_reviews_movie_genre', 'movie_reviews'), array ('labels' => array ('name' => 'Movie Genre'), 'add_new_item' => 'Neuen Movie Genre hinzufügen', 'new_item_name' = > "New Movie Type Genre"), 'show_ui' => true, 'show_tagcloud' => false, 'hierarchisch' => true)); 

Hier die register_taxonomy function erledigt die harte Arbeit beim Erstellen einer benutzerdefinierten Taxonomie (in unserem Fall einer Kategorie) mit dem Namen 'movie_reviews_movie_genre'für den benutzerdefinierten Beitragstyp'movie_reviews'. Die Bezeichnungen definieren die verschiedenen Zeichenfolgen, die im Admin-Abschnitt der Taxonomie verwendet werden.

  • 'show_ui' => true wird verwendet, um den Taxonomie-Editor im Dashboard sichtbar zu machen.
  • 'show_tagcloud' => false Dekodieren Sie, ob die Tag-Cloud sichtbar sein soll. In unserem Fall ist es deaktiviert.
  • 'hierarchisch' => wahr dekodiert das Format der benutzerdefinierten Taxonomie.

Hinweis: 'hierarchisch' => falsch wandelt die Kategorien in Tags um.

Schritt 3: Anzeigen benutzerdefinierter Taxonomien

Nach dem Speichern der Movie-Reviews.php Datei, öffnen Sie Ihre benutzerdefinierte Vorlagendatei, in unserem Fall single-movie_reviews.php und fügen Sie folgendes hinzu hervorgehoben Code, um die Kategorien in unseren Beiträgen sichtbar zu machen.

 
'movie_reviews',); $ loop = neue WP_Query ($ mypost); ?> have_posts ()): $ loop-> the_post ();?>
>
Titel:
Direktor:
Genre: ID, 'movie_reviews_movie_genre', ");?>
Bewertung: '; else echo ''; ?>

Schritt 4: Das Ergebnis

Hier haben wir eine benutzerdefinierte Taxonomie 'Movie Genre' in unseren Filmbewertungen CPT hinzugefügt. Jetzt können wir neue Kategorien aus dem Admin-Panel hinzufügen und jede dieser Kategorien unserem CPT zuordnen.


Zusätzliche Spalten anzeigen

In der CPT-Auflistungsseite von WordPress sind standardmäßig zwei Spalten enthalten - Datum und Kommentare -, durch die wir diese CPT-Elemente sortieren können. Um zusätzliche Spalten und Sortierungen hinzuzufügen, befolgen Sie bitte die unten angegebenen Schritte.

Schritt 1: Funktion registrieren

Öffnen Sie die Plugin-Datei Movie-Reviews.php Fügen Sie die folgende Codezeile hinzu, um eine Funktion zu registrieren, die aufgerufen werden soll, wenn die Auflistungsseite für Filmberichte vorbereitet wird.

add_filter ('manage_edit-movie_reviews_columns', 'meine_columns'));

Hier haben wir den Variablenfilter verwendet manage_edit- (Custom_Post_Type) _Spalten, die die Spaltenliste des CPT als Argument an die Funktion übergibt.

Schritt 2: Implementierung der Funktion

function my_columns ($ Spalten) $ Spalten ['movie_reviews_director'] = 'Director'; $ Spalten ['movie_reviews_rating'] = 'Bewertung'; nicht gesetzt ($ column ['comments']); $ spalten zurückgeben; 

Hier haben wir zwei Spalten hinzugefügt: Direktor und Bewertung im Admin-Panel des CPT und löschte auch die Spalte Kommentare aus der Liste.

Schritt 3: Füllen der Spalten

Registrieren Sie eine Funktion, um die Spalten aufzufüllen.

add_action ('manage_posts_custom_column', 'populate_columns');

Schritt 4: Implementierung

Funktion populate_columns ($ column) if ('movie_reviews_director' == $ column) $ movie_director = esc_html (get_post_meta (get_the_ID (), 'movie_director', true)); echo $ movie_director;  elseif ('movie_reviews_rating' == $ column) $ movie_rating = get_post_meta (get_the_ID (), 'movie_rating', true); echo $ movie_rating. ' Sterne'; 

Da hier die Funktion ausgeführt wird, wenn eine der CPT-Spalten gerendert wird, prüft sie, ob die aktuell angeforderten Spalten vorhanden sind, bevor sie wiedergegeben werden. Wir haben die verwendet get_the_ID () Funktion, um den Index der aktuellen Zeile abzurufen und dann wiederum die get_post_meta um die Daten in der Spalte abzurufen.

Schritt 5: Registrieren Sie Spalten als sortierbar

Lassen Sie uns nun eine Funktion registrieren, die aufgerufen werden soll, wenn WordPress sortierbare Spalten in CPT identifiziert.

add_filter ('manage_edit-movie_reviews_sortable_columns', 'sort_me'));

Schritt 6: Implementierung

function sort_me ($ Spalten) $ Spalten ['movie_reviews_director'] = 'movie_reviews_director'; $ Spalten ['movie_reviews_rating'] = 'movie_reviews_rating'; $ spalten zurückgeben; 

Diese Funktion identifiziert zwei Spalten, um sie sortierbar zu machen, und gibt dann das Array zurück. Aber unsere Arbeit ist noch nicht beendet.

Schritt 7: Nach benutzerdefiniertem Feld bestellen

add_filter ('request', 'column_ordering'); add_filter ('request', 'column_orderby'); function column_orderby ($ vars) if (! is_admin ()) gibt $ vars zurück; if (isset ($ vars ['orderby']) && 'movie_reviews_director' == $ vars ['orderby']) $ vars = array_merge ($ vars, array ('meta_key' => 'movie_director', 'orderby' = > 'meta_value'));  elseif (isset ($ vars ['orderby']) && 'movie_reviews_rating' == $ vars ['orderby']) $ vars = array_merge ($ vars, array ('meta_key' => 'movie_rating', 'orderby') => 'meta_value_num'));  return $ vars; 

Die obige Funktion ist dem Anforderungsfilter zugeordnet und fügt dem Abfrage-Array Elemente hinzu, die auf den Variablen in der Abfrage-URL basieren. Eigentlich weiß WordPress nicht, wie es mit den Feldern "Movie Director" oder "Movie Rating" bestellt werden soll. Daher müssen wir WordPress beibringen, wie dies mit dieser Funktion geschieht.

Wir haben erfolgreich zwei sortierbare Spalten im Admin-Bereich hinzugefügt.


Erstellen von Filtern mit benutzerdefinierter Taxonomie

Hier wird gezeigt, wie benutzerdefinierte Taxonomien (in diesem Fall Kategorien) als zusätzlicher Filter auf der CPT-Auflistungsseite des WordPress-Administrators verwendet werden können, sodass Administratoren CPT-Elemente anzeigen können, die zu einer bestimmten Kategorie gehören.

Schritt 1: Registrieren Sie die Funktion

Öffnen Sie Ihre Plugin-Datei und fügen Sie den folgenden Code hinzu, um eine Funktion zu registrieren, die aufgerufen werden soll, wenn WordPress die Filter-Dropdown-Liste vorbereitet.

add_action ('constra_manage_posts', 'my_filter_list'));

Schritt 2: Implementierung der Funktion

function my_filter_list () $ screen = get_current_screen (); global $ wp_query; if ($ screen-> post_type == 'movie_reviews') wp_dropdown_categories (array ('show_option_all' => 'Alle Filmgenres anzeigen', 'taxonomy' => 'movie_reviews_movie_genre', 'name' => 'movie_reviews_movie_genre', 'bestellen '=>' name ',' selected '=> (isset ($ wp_query-> query [' movie_reviews_movie_genre '])? $ wp_query-> query [' movie_reviews_movie_genre ']: "),' hierarchisch '=> false,' tiefe '=> 3,' show_count '=> false,' hide_empty '=> true,));

Hier haben wir eine globale Variable verwendet, um die Art des Postens zu kennen, der angezeigt wird, und eine Post-Abfrage-Variable, um zu überprüfen, ob bereits ein Filter vorhanden ist, und den Filter entsprechend festzulegen. Das wp_dropdown_categories Mit dieser Funktion können Sie alle mit Movie Genres registrierten Taxonomien anzeigen. Das 'Sortieren nach','show_count','hide_empty','Tiefe'usw. sind verschiedene Argumente, die die Sortierung angeben. Zeigen Sie die Anzahl der Elemente für jede Kategorie an, blenden Sie nicht verknüpfte Kategorien aus und bestimmen Sie die maximale Tiefe, die für die hierarchischen Kategorien angezeigt werden soll.

Schritt 3: Gefilterte Ergebnisse anzeigen

Nachdem die Filter-Dropdown-Liste erstellt wurde, schreiben wir Code, um die gefilterten Ergebnisse anzuzeigen. Registrieren Sie eine Funktion, die aufgerufen werden soll, wenn die Nachanzeigeabfrage vorbereitet wird.

add_filter ('parse_query', 'perform_filtering');

Schritt 4: Implementierung der Anzeigefunktion

Funktion perform_filtering ($ query) $ qv = & $ query-> query_vars; if (($ qv ['movie_reviews_movie_genre']) && is_numeric ($ qv ['movie_reviews_movie_genre']))) $ term = get_term_by ('id', $ qv ['movie_reviews_movie_genre'], 'movie_reviews_movie_re' ' $ qv ['movie_reviews_movie_genre'] = $ term-> slug; 

Das perform_filterung Die Funktion empfängt das aktuelle WordPress-Post-Abfrageobjekt und beginnt mit dem Abrufen eines Zeigers auf die im Abfrageobjekt gespeicherten Abfragevariablen. Dann wird überprüft, ob ein Filmgenre Teil der Abfragevariablen ist, und die Abfrage wird dann ausgeführt.

Jetzt können Sie den Filter verwenden, um die Filme nach ihren Genres anzuzeigen.


Last but not least: Erstellen Sie eine Archivseite

Da wir eine benutzerdefinierte Vorlage für unser CPT erstellt haben, können wir auch eine benutzerdefinierte Archivseite erstellen, die die Standard-Archivvorlage überschreibt.

Schritt 1: Hinzufügen eines Fallbacks zur Archivvorlage

Öffnen Sie die Plugin-Datei Movie-Reviews.php und fügen Sie den hervorgehobenen Code im hinzu include_template_function Funktion.

function include_template_function ($ template_path) if (get_post_type () == 'movie_reviews') if (is_single ()) // prüft, ob die Datei zuerst im Theme vorhanden ist, // die Datei andernfalls über das Plugin if ($ theme_file = locate_template (array ('single-movie_reviews.php'))) $ template_path = $ theme_file;  else $ template_path = plugin_dir_path (__FILE__). '/single-movie_reviews.php';  elseif (is_archive ()) if ($ theme_file = locate_template (array ('archive-movie_reviews.php'))) $ template_path = $ theme_file;  else $ template_path = plugin_dir_path (__FILE__). '/archive-film_reviews.php';  return $ template_path; 

WordPress durchsucht das Designverzeichnis nach einer Archivvorlagendatei, bevor die Standardvorlage verwendet wird. Diese Funktion prüft, ob der Benutzer eine Archivvorlage im Designverzeichnis angegeben hat. Andernfalls sucht er nach der Datei im Ordner des Plugins.

Schritt 2: Erstellen Sie die Archivvorlage

Speichern und schließen Sie die Plugin-Datei und erstellen Sie eine neue Datei mit dem Namen archive-movie_reviews.php und fügen Sie den folgenden Code hinzu.

 

Filmkritiken

Titel Direktor
">
max_num_pages) && $ wp_query-> max_num_pages> 1) ?>


Hier haben wir die Schleife verwendet, um die Post-Einträge zu durchlaufen und sie dann in einem Tabellenlayout anzuzeigen. Wir haben auch ein Navigationsmenü definiert, wenn mehr Elemente vorhanden sind als die in den WordPress-Einstellungen konfigurierte maximale Anzahl. Navigationsmenüs werden mit angezeigt next_post_links und vorherige_post_links Funktionen.

Wir haben das Globale genutzt wp_query Objekt, das die Daten zur aktuell ausgeführten Abfrage enthält, um den Seiteninhalt darzustellen. Das get_post_meta Funktion wurde verwendet, um benutzerdefinierte Felddaten abzurufen.

Schritt 3: Das Ergebnis

Speichern Sie die Datei und suchen Sie auf der Archivseite nach der Movie Reviews-Archivliste.


Hier kommen wir zum Ende dieses Tutorials. Ich hoffe, Sie konnten die Bedeutung von benutzerdefinierten Post-Typen verstehen. Es gibt noch mehr zu entdecken, spielen Sie einfach damit herum.

Vielen Dank für das Lesen und geben Sie uns Ihr Feedback.