Réponses:
get_page_template()
peut être remplacé via le page_template
filtre. Si votre plugin est un répertoire contenant les modèles en tant que fichiers, il vous suffit de passer les noms de ces fichiers. Si vous voulez les créer "à la volée" (les éditer dans la zone d'administration et les enregistrer dans la base de données?), Vous pouvez les écrire dans un répertoire de cache et y faire référence, ou y accrocher template_redirect
et faire des eval()
trucs fous .
Un exemple simple pour un plugin qui "redirige" vers un fichier du même répertoire de plugin si un critère donné est vrai:
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;
}
Passer outre get_page_template()
est juste un hack rapide. Il ne permet pas de sélectionner le modèle à partir de l'écran Admin et le slug de page est codé en dur dans le plug-in, de sorte que l'utilisateur n'a aucun moyen de savoir d'où provient le modèle.
La solution à privilégier serait de suivre ce tutoriel qui vous permet d’enregistrer un modèle de page dans le back-end à partir du plug-in. Ensuite, cela fonctionne comme n'importe quel autre modèle.
/*
* 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',
);
}
Oui c'est possible. J'ai trouvé cet exemple de plugin très utile.
Une autre approche qui me vient à l’esprit consiste à utiliser l’ API WP Filesystem pour créer le fichier de modèle à thème. Je ne suis pas sûr que ce soit la meilleure approche à prendre, mais je suis sûr que cela fonctionne!
Aucune des réponses précédentes ne fonctionnait pour la mienne. En voici un où vous pouvez choisir votre modèle dans Wordpress admin. Il suffit de le mettre dans votre fichier plugin php principal et de le modifier template-configurator.php
par votre nom de modèle
//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;
}