Antworten:
get_page_template()
kann über den page_template
Filter überschrieben werden. Wenn Ihr Plugin ein Verzeichnis mit den Vorlagen als Dateien ist, müssen Sie nur die Namen dieser Dateien übergeben. Wenn Sie sie "on the fly" erstellen möchten (bearbeiten Sie sie im Admin-Bereich und speichern Sie sie in der Datenbank?), Möchten Sie sie möglicherweise in ein Cache-Verzeichnis schreiben und auf sie verweisen oder template_redirect
verrückte eval()
Dinge erledigen .
Ein einfaches Beispiel für ein Plugin, das zu einer Datei im selben Plugin-Verzeichnis "umleitet", wenn ein bestimmtes Kriterium erfüllt ist:
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template )
{
if ( is_page( 'my-custom-page-slug' ) ) {
$page_template = dirname( __FILE__ ) . '/custom-page-template.php';
}
return $page_template;
}
Überschreiben get_page_template()
ist nur ein schneller Hack. Die Vorlage kann nicht auf dem Admin-Bildschirm ausgewählt werden, und der Page Slug ist fest in das Plug-In integriert, sodass der Benutzer nicht weiß, woher die Vorlage stammt.
Die bevorzugte Lösung wäre, diesem Tutorial zu folgen , mit dem Sie eine Seitenvorlage im Back-End des Plug- Ins registrieren können. Dann funktioniert es wie jede andere Vorlage.
/*
* Initializes the plugin by setting filters and administration functions.
*/
private function __construct() {
$this->templates = array();
// Add a filter to the attributes metabox to inject template into the cache.
add_filter('page_attributes_dropdown_pages_args',
array( $this, 'register_project_templates' )
);
// Add a filter to the save post to inject out template into the page cache
add_filter('wp_insert_post_data',
array( $this, 'register_project_templates' )
);
// Add a filter to the template include to determine if the page has our
// template assigned and return it's path
add_filter('template_include',
array( $this, 'view_project_template')
);
// Add your templates to this array.
$this->templates = array(
'goodtobebad-template.php' => 'It\'s Good to Be Bad',
);
}
Ja, es ist möglich. Ich fand dieses Beispiel-Plugin sehr hilfreich.
Ein anderer Ansatz, der mir in den Sinn kommt, ist die Verwendung der WP-Dateisystem-API , um die Vorlagendatei für das Thema zu erstellen. Ich bin mir nicht sicher, ob es der beste Ansatz ist, aber ich bin mir sicher, dass es funktioniert!
Keine der vorherigen Antworten hat für mich funktioniert. Hier können Sie Ihre Vorlage in Wordpress Admin auswählen. Einfach in die Haupt-PHP-Plugin-Datei einfügen und template-configurator.php
durch den Namen der Vorlage ändern
//Load template from specific page
add_filter( 'page_template', 'wpa3396_page_template' );
function wpa3396_page_template( $page_template ){
if ( get_page_template_slug() == 'template-configurator.php' ) {
$page_template = dirname( __FILE__ ) . '/template-configurator.php';
}
return $page_template;
}
/**
* Add "Custom" template to page attirbute template section.
*/
add_filter( 'theme_page_templates', 'wpse_288589_add_template_to_select', 10, 4 );
function wpse_288589_add_template_to_select( $post_templates, $wp_theme, $post, $post_type ) {
// Add custom template named template-custom.php to select dropdown
$post_templates['template-configurator.php'] = __('Configurator');
return $post_templates;
}