Tout savoir sur WordPress

Utiliser vos propres templates de pages dans votre plugin WordPress

Vous souhaitez, dans le cadre de votre plugin, afficher un contenu sur une nouvelle page ? Cet article montre comment créer une page WordPress automatiquement depuis votre plugin et y associer une page de template créée pour l’occasion.

Première étape : créer la page dans WordPress

Cette étape n’est pas obligatoire, elle permet de créer une page WordPress pour que l’utilisateur n’aie pas à le faire manuellement. Selon les cas de figure cette étape n’est pas forcément nécessaire.

Pour créer la page , utilisez ce bout de code :


$my_post = array(
'post_title' => 'Nom de la page',
'post_content' => '',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'page'
);

// Insert the post into the database
wp_insert_post( $my_post );

Il faut l’inclure dans un code qui vérifie si la page existe, sinon la page sera créée à chaque fois. Utilisez la fonction get_pages() pour savoir si la page existe déjà.

L’avantage de créer une page est que vous pouvez faire un lien vers elle dans vos menus WordPress.

Deuxième étape : utiliser le template pour cette page

On va maintenant ajouter le code pour remplacer le template choisi par le template hierarchy WordPress pour afficher celui que l’on a fait et mis dans notre plugin :

Mettez ce code au début de votre plugin (dans votre fonction __construct si vous êtes en POO) :


function override_template( $page_template )
{

if (is_page( 'nom-de-la-page' )) {
$page_template = dirname( __FILE__ ) . '/templates/mon-template.php';
}

}

Si vous êtes en POO, mettez public function au début. Dans cet exemple j’appelle une page mon-template.php située dans un dossier templates qui est lui même dans le dossier de mon plugin.

Et voilà, lorsque vous afficherez votre page, c’est le template du plugin qui sera chargé.

Cet article a été mis à jour il y a 4148 jours - Il n'est peut être plus à jour !

Article écrit par Maxime BJ

Développeur, bloggeur et formateur Web spécialisé WordPress. 36 ans. Grenoblois. Co-fondateur de WPChef, l’organisme de formation WordPress.

Co-fondateur de WPChef, la formation WordPress pour les débutants. Vous pouvez me rencontrer lors d’événements tels que les WordCamp. Traducteur Français de l’extension Advanced Custom Fields. Je m’occupe un site pour apprendre l’informatique aux débutants gratuitement.

5 Commentaires

  1. Ça marche pas ton truc.

    De plus tu dis de faire un get_pages pour vérifier si elle existe déjà, ce qui va faire une requête de plus par pages ? Pourquoi ne pas le mettre dans un hook install ou enable ?

  2. Pour la prise en charge du fichier de template dans le plugin, j’ai plutôt fais ça:

    function override_template( $page_template )
    {
    if (is_page( ’boutique’ )) {
    $page_template = dirname( __FILE__ ) . ‘/templates/boutique.php’;
    }
    return $page_template;
    }

    add_filter(‘template_include’,’override_template’);

    En m’aidant de ça:
    http://wordpress.stackexchange.com/questions/51038/template-include-overriding-default-plugin-templates-via-current-theme

    • Oui c’est une bonne pratique, je l’ai fait assez récemment d’ailleurs pour un besoin client. Faudra que je mette à jour. Merci de ta contribution