Beim Erstellen eines benutzerdefinierten Beitragstyps innerhalb eines WordPress-Plugins gibt es immer dasselbe Problem: Sie müssen einen benutzerdefinierten Beitrag erstellen single- [cpt_slug] .php Datei in Ihrem Designordner, wenn Sie die Standardeinstellung nicht verwenden möchten single.php Datei aus Ihrem Thema.
In diesem Beitrag möchte ich zwei Aspekte der Verwendung benutzerdefinierter Vorlagen behandeln. Der erste Schritt besteht darin zu zeigen, dass wir eine benutzerdefinierte Datei verwenden können, die direkt im Plugin selbst enthalten ist, anstatt die Standarddatei zu laden single.php, Die zweite ist, wie Sie Ihre eigene benutzerdefinierte Datei in Ihrem Designordner erstellen.
Viele Plugins wie Easy Digital Downloads oder Shopp verwenden diese Methode: Das Plugin prüft, ob Sie eine benutzerdefinierte Vorlage in Ihrem Designordner definieren. Wenn dies der Fall ist, wird die Datei geladen. Andernfalls wird die Standard-Plugin-Vorlagendatei geladen. In beiden Fällen ist das Thema voreingestellt single.php Datei wird nicht geladen.
Der allererste Schritt ist das Erstellen eines Plugins, nennen wir es "Vorlagenauswahl". Ein ... kreieren "Vorlagenauswahl"Ordner unter / wp-content / plugins /, mit der folgenden Struktur:
Die Plugin-StrukturDann öffnen Sie die Hauptdatei template-select.php und fügen Sie den folgenden Plugin-Headercode ein:
/ * Plugin-Name: CPT-Vorlage Auswahl-Plugin-URL: http://wp.tutsplus.com/ Beschreibung: Lädt eine benutzerdefinierte Vorlagendatei anstelle der Standarddatei single.php. Version: 0.1 Autor: Remi Corson Author URI: http: // wp .tutsplus.com / * /
Später im Plugin müssen wir die Plugin-URL und ihren Pfad problemlos abrufen. Deshalb müssen wir einige Konstanten definieren:
/ * | ------------------------------------------- --------------------------- | KONSTANTEN | -------------------------------------------- -------------------------- * / if (! definiert ('RC_TC_BASE_FILE')) define ('RC_TC_BASE_FILE', __FILE__); if (! defined ('RC_TC_BASE_DIR')) define ('RC_TC_BASE_DIR', Verzeichnisname (RC_TC_BASE_FILE)); if (! defined ('RC_TC_PLUGIN_URL')) define ('RC_TC_PLUGIN_URL', plugin_dir_url (__FILE__));
Um weiterzugehen, müssen wir einen neuen benutzerdefinierten Beitragstyp einrichten.Zeugnis"CPT, mit einigen sehr grundlegenden Unterstützungen und Funktionen. Da das Ziel des Beitrags nicht darin besteht, zu lehren, wie man einen benutzerdefinierten Beitragstyp erstellt, verwende ich einen recht einfachen Code, der in drei Teile unterteilt ist: die benutzerdefinierten Typenbezeichnungen, die Unterstützungen und die benutzerdefinierten Argumente für den Post-Typ: Alle, die in eine einzige Funktion eingebettet sind:
/ * | ------------------------------------------- --------------------------- | DEFINIEREN SIE DEN BENUTZERDEFINIERTEN POSTTYP | ------------------------------------------ ------------------------------ * / / ** * Testimonial einrichten Benutzerdefinierter Beitragstyp * * @since 1.0 * / function rc_tc_setup_post_types () // Benutzerdefinierte Beitragstypbeschriftungen $ labels = array ('name' => esc_html __ ('Testimonials', 'rc_tc'), 'singular_name' => esc_html __ ('Testimonial'), 'rc_tc', 'add_new' = > esc_html __ ('Neu hinzufügen', 'rc_tc'), 'add_new_item' => esc_html __ ('Neues Testimonial hinzufügen', 'rc_tc'), 'edit_item' => esc_html __ ('Testimonial bearbeiten', 'rc_tc'), 'new_item' '=> esc_html __ (' Neues Testimonial ',' rc_tc '),' view_item '=> esc_html __ (' View Testimonial ',' rc_tc '),' search_items '=> esc_html __ (' Testimonial ',' rc_tc '),' not_found '=> esc_html __ (' Kein Zeugnis gefunden ',' rc_tc '),' not_found_in_trash '=> esc_html __ (' Kein Zeugnis im Papierkorb gefunden ',' rc_tc '),' parent_item_colon '=> "); = array ('title', 'editor'); // Benutzerdefinierter Beitragstyp Unterstützt $ args = array ('labels' => $ labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'can_export' => true, 'umschreiben' => array ('slug' => 'testimonials', 'with_front' => true ),'acity_type '=>' post ',' hierarchisch '=> false,' menu_position '=> 25,' unterstützt '=> $ unterstützt,' menu_icon '=> RC_TC_PLUGIN_URL. '/includes/images/testimonials_icon.png', // Sie können hier Ihr eigenes Symbol setzen.); // Registrieren Sie schließlich den benutzerdefinierten Beitragstyp "testimonial" register_post_type ('testimonial', $ args); add_action ('init', 'rc_tc_setup_post_types');
Jetzt, da unser benutzerdefinierter Beitragstyp registriert ist, müssen wir eine Funktion erstellen, die WordPress mitteilt nicht um die Standardeinstellung zu verwenden single.php aus dem thema.
Da standardmäßig "yes" angezeigt wird, wenn ein benutzerdefinierter Beitragstyp im Frontend angezeigt wird, prüft WordPress, ob eine Datei aufgerufen wurde single-testimonial.php existiert und wird es laden. Wenn nicht, wird nach dem gesucht single.php. Aber wir wollen keine davon verwenden.
Wir möchten, dass WordPress eine benutzerdefinierte Datei aus dem Plugin lädt. Dazu müssen wir eine neue Funktion an die "template_include
"filtern. In dieser Funktion besteht das Ziel darin, die Art der Stelle zu überprüfen und in der Folge zu handeln:
/ * | ------------------------------------------- --------------------------- | FILTER | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser'); / * | ------------------------------------------- --------------------------- | PLUGIN-FUNKTIONEN | ------------------------------------------- --------------------------- * / / ** * Gibt die Vorlagendatei zurück * * @since 1.0 * / Funktion rc_tc_template_chooser ($ template) // Post ID $ post_id = get_the_ID (); // Für alle anderen CPT if (get_post_type ($ post_id)! = 'Testimonial') return $ template; // Sonst keine benutzerdefinierte Vorlage verwenden if (is_single ()) return rc_tc_get_template_hierarchy ('single');
Wie Sie sehen, rufen wir in Zeile 33 eine neue Funktion auf rc_tc_get_template_hierarchy ()
. Diese Funktion prüft, ob WordPress die benutzerdefinierte Datei aus dem Plugin oder die Vorlage aus dem Designordner laden muss.
Wenn ich von der "Vorlage aus dem Designordner" spreche, spreche ich von einer benutzerdefinierten Datei, die statt der geladen wird single.php.
Nehmen wir an, Sie möchten die im Plugin enthaltene Vorlage nicht laden, sondern eine eigene benutzerdefinierte Vorlage erstellen. Alles, was Sie tun müssen, ist, einen neuen Ordner im Designordner zu erstellen.plugin_template"und in diesem Ordner erstellen Sie eine single.php Datei. Dies wird Ihre neue Standardeinstellung sein single.php wird nur für die am Frontend angezeigten Zeugnisse geladen.
Sind Sie noch da? Okay, lass uns die Funktion erstellen:
/ ** * Die benutzerdefinierte Vorlage abrufen, wenn gesetzt ist * * @since 1.0 * / function rc_tc_get_template_hierarchy ($ template) // Hole die Vorlage slug $ template_slug = rtrim ($ template, '.php'); $ template = $ template_slug. '.php'; // Prüfen Sie, ob eine benutzerdefinierte Vorlage im Designordner vorhanden ist. Falls nicht, laden Sie die Plugin-Vorlagendatei if ($ theme_file = locate_template (array ('plugin_template /'. $ Template))) $ file = $ theme_file; else $ file = RC_TC_BASE_DIR. '/ include / templates /'. $ template; geben Sie apply_filters zurück ('rc_repl_template_'. $ template, $ file); / * | ------------------------------------------ ---------------------------- | FILTER | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser');
Erstellen Sie nun ein neues Zeugnis in der Verwaltung. Dann öffnen Includes / templates / single.php Kopieren Sie dann diesen einfachen Code und fügen Sie ihn ein:
Wir sind in der benutzerdefinierten Plugin-Datei
Wenn Sie das Zeugnis auf dem Frontend visualisieren, sollten Sie das "Wir sind in der benutzerdefinierten Plugin-Datei" sehen. Das wollten wir. Wenn die Plugin-Vorlagendatei jedoch nicht Ihren Anforderungen entspricht oder Sie einfach ein persönlicheres Design erstellen möchten, können Sie eine Datei in Ihrem Designordner erstellen.
Um eine benutzerdefinierte Vorlage zu erstellen, die nicht die Standardvorlage aus dem Plugin verwendet, können Sie einen neuen Ordner mit dem Namen "" erstellen.plugin_templates"in Ihrem Designordner. Erstellen Sie eine neue Datei mit dem Namen single.php und geben Sie diesen Code ein:
Wir sind in der benutzerdefinierten Designdatei
Was haben wir genau gemacht? Nun, wir haben ein Plugin erstellt, das einen benutzerdefinierten Beitragstyp registriert. "Zeugnis". Wir haben die Funktionalität erreicht, eine benutzerdefinierte Datei zu laden, die im Plugin-Ordner gespeichert ist, anstatt der Standarddatei single.php oder single-testimonial.php Dateien aus dem Designordner. Es ist uns auch gelungen, eine benutzerdefinierte Datei statt aus dem Designordner unter "plugin_templates
".
Warum ist das nett? Beim Erstellen eines eigenen Plugins können Sie eine Standardvorlage bereitstellen, um den benutzerdefinierten Beitragstyp anzuzeigen, sodass Sie dem Endbenutzer die Wahl geben, ob er seine eigene Vorlage verwenden soll oder nicht.