Frisch notiert!

Die neusten Artikel aus unserem Blog.

WordPress HOW-TO: Eigene Templates in Plugins verwenden

Zuletzt aktualisiert am 18/08/2016 von Adrian Lambertz
Wordpress
/ Wordpress / 0

Möchte man ein eigenständiges Plugin schreiben, welches beispielsweise einen eigenen Custom Post Type erstellt steht man vor einem Problem, wenn man die Ausgabe des CPTs selber steuern will.

Da die Ausgabe standardmässig nämlich direkt über das installierte Theme geschieht, kann man als Plugin Entwickler nicht selber steuern, wie sie sich gestaltet.

Als autonom agierendes Plugin, welches themeunabhängig funktionieren soll, muss also eine Weiche programmiert werden, um die Ausgabe selber steuern zu können:

/* Quit => security */
defined('ABSPATH') OR exit;

// --------------------------------------------------------------------

/* settings */
$cpt = 'pix_cpt'; //custom post type key
$single = 'pix_single'; //name der single template datei ohne .php endung
$archive = 'pix_archive'; //name der archive template datei ohne .php endung
$plugin_path = 'mein/pfad/zum/plugin'; //pfad zum plugin (kann z.B. mit der plugin konstanten gesetzt werden, insofern diese konstante gesetzt wurde)
$template_folder = '/templates/'; //der pfad zum template ordner innerhalb des plugins. Die slashes am anfang und am ende nicht vergessen!

// --------------------------------------------------------------------

/* The filter */
add_filter( 'template_include', 'pix_template_controller');

// --------------------------------------------------------------------

/* The filter function */
function pix_template_controller( $template ) {

// Post ID
$post_id = get_the_ID();

// For all other CPT
if ( get_post_type( $post_id ) == $cpt && is_archive() ) {
return pix_get_template_hierarchy( $archive );
} else if ( get_post_type( $post_id ) == $cpt ) {
return pix_get_template_hierarchy( $single );
} else {
return $template;
}

}

// --------------------------------------------------------------------

/* The function that checks if the file exists in the theme folder. */
function pix_get_template_hierarchy( $template ) {

// Get the template slug
$template_slug = rtrim( $template, '.php' );
$template = $template_slug . '.php';

// Check if a custom template exists in the theme folder, if not, load the plugin template file
if ( $theme_file = locate_template( $template ) ) {
$file = $theme_file;
} else {
$file = $plugin_path . $template_folder . $template;
}

return $file;
}

Diese Datei umfasst den gesamten Template Switch. Sie funktioniert so, dass die Funktion prüft, ob die in den Settings festgelegten Template Dateien innerhalb des installierten Themes existieren oder nicht. Falls sie existieren, werden die Theme Dateien geladen, falls nicht werden die Plugin Templates geladen.

So kann man als Plugin Entwickler seine Ausgabe komplett selbst steuern und lässt dem Endbenutzer / Themeentwickler die Möglichkeit, das Template innerhalb des Themes selber anzupassen.

Adrian Lambertz

Seit 2010 bin ich nun schon bei Pixelbar mit dabei. Zuerst als Auszubildender und nach erfolgreichem Abschluss meiner Ausbildung als Frontend-Entwickler. Ohne Musik und Kaffee kann ich nicht leben, daher konsumiere ich beides während der Arbeit praktisch durchgehend :). Daneben liebe ich WordPress - darauf habe ich mich spezialisiert.

Weitere Beiträge von adrian anzeigen

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert