Risposte:
get_page_template()
può essere ignorato tramite il page_template
filtro. Se il tuo plug-in è una directory con i modelli come file, è solo questione di passare i nomi di questi file. Se vuoi crearli "al volo" (modificarli nell'area di amministrazione e salvarli nel database?), Potresti volerli scrivere in una directory della cache e fare riferimento ad essi, oppure agganciarli template_redirect
e fare eval()
cose folli .
Un semplice esempio per un plugin che "reindirizza" a un file nella stessa directory del plugin se un certo criterio è vero:
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;
}
L'override get_page_template()
è solo un trucco rapido. Non consente di selezionare il modello dalla schermata di amministrazione e lo slug della pagina è codificato nel plug-in in modo che l'utente non abbia modo di sapere da dove provenga il modello.
La soluzione preferita sarebbe seguire questo tutorial che consente di registrare un modello di pagina nel back-end dal plug-in. Quindi funziona come qualsiasi altro modello.
/*
* 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',
);
}
Sì, è possibile. Ho trovato questo plugin di esempio molto utile.
Un altro approccio che mi viene in mente è l'utilizzo dell'API WP Filesystem per creare il file modello sul tema. Non sono sicuro che sia l'approccio migliore da adottare, ma sono sicuro che funzioni!
Nessuna delle risposte precedenti funzionava per la mia. Qui uno in cui puoi scegliere il tuo modello nell'amministratore di Wordpress. Basta inserirlo nel file del plug-in php principale e modificarlo in template-configurator.php
base al nome del modello
//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;
}