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é.
5 Commentaires
Ç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 ?
C’est un vieil article. Il est fort probable qu’il ne soit plus à jour et ma technique pas la bonne. Dès que j’ai un moment je m’occupe d’en faire un nouveau. Merci pour le feedback.
Merci pour ce tuto(et les autres) ça m’a inspiré pour trouver une solution qui devrait plaire à juju, le 3eme post sur cette page fonctionne:
https://wordpress.org/support/topic/how-do-i-create-a-new-page-with-the-plugin-im-building
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