Créer des modèles de page personnalisés avec des plugins?

50

Est-il possible de créer des modèles de page personnalisés à partir d'un plugin?

    
posée jnthnclrk 28.10.2010 - 19:04
la source

3 réponses

65

get_page_template() peut être remplacé via le page_template filter. 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 cache et y faire référence, ou vous connecter à template_redirect et faire quelques fous eval() stuff.

Un exemple simple pour un plugin qui "redirige" vers un fichier du même répertoire de plugin si un certain critère 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;
}
    
réponse donnée Jan Fabry 02.11.2010 - 14:52
la source
13

Remplacer get_page_template() n’est qu’un rapide piratage. 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 préférée serait de suivre ce didacticiel qui permet vous inscrire 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',
        );
}
    
réponse donnée fireydude 12.10.2015 - 13:29
la source
4

Oui, c'est possible. J'ai trouvé cet exemple de plug-in très utile.

Une autre approche qui me vient à l'esprit consiste à utiliser API de système de fichiers WP 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!

    
réponse donnée KeepMove 04.12.2014 - 16:37
la source

Lire d'autres questions sur les étiquettes