Désactiver les modèles de pages d’un thème parent sous WordPress

13 commentaires
Désactiver les modèles de pages d’un thème parent sous WordPress

La technique des thèmes enfants sous WordPress ou child theme en anglais, vous permet d’apporter des modifications à un thème parent sans pour autant modifier le code original.

Utilisant cette méthode assez fréquemment, je cherchais un moyen de désactiver – ou du moins de masquer, les modèles de pages issus dudit thème parent sans pour autant supprimer les fichiers sources ; que je vous délivre dans la suite du tutoriel.

Pour rappel, les modèles de pages sous WordPress permettent de bénéficier d’une mise en page différente. Ils sont souvent utilisés dans les thèmes premium pour proposer des pages prêtes-à-l’emploi comme les formulaires de contact, les plans de site ou encore les portfolio. Reportez à cette liste de 6 modèles de pages pour WordPress pour en apprendre davantage à leurs sujets.

Capture d'écran - Liste des modèles de page sous WordPress
Un exemple de modèle de page disponible avec mon thème WordPress

Ces modèles de page sont présents dans la boite Attributs de la page dans l’éditeur de création de page, sur la partie droite. Ils correspondent automatiquement à un fichier PHP présent dans le dossier du thème dans /wp-content/themes/NOM_DU_THEME/

Ainsi, si je souhaite désactiver le modèle Liens correspondant au fichier template-links.php, je devrais l’ajouter dans la fonction ci-dessous. Cette fonction doit être insérée dans le fichier functions.php de votre thème enfant pour surpasser les réglages du thème parent.

// Masquage des modèles de page inutiles
$_templates_to_remove = array();
function remove_template( $files_to_delete = array() ){
if ( is_scalar( $files_to_delete ) ) $files_to_delete = array( $files_to_delete );
global $_templates_to_remove;
$_templates_to_remove = array_unique(array_merge($_templates_to_remove, $files_to_delete));

add_action('admin_print_footer_scripts', '_remove_template_footer_scripts');
}
function _remove_template_footer_scripts() {
global $_templates_to_remove;
if ( ! $_templates_to_remove ) { return; }
?>
<script type="text/javascript">
jQuery(function($) {
var tpls = <?php echo json_encode($_templates_to_remove); ?>;
$.each(tpls, function(i, tpl) {
$('select[name="page_template"] option[value="' tpl '"]').remove();
});
});
</script>
<?php
}
add_action('admin_head-post.php', 'remove_parent_templates');
add_action('admin_head-post-new.php', 'remove_parent_templates');
function remove_parent_templates() {
remove_template(array(
'template-links.php',
'page-portfolio.php'
));
}

Le principe est donc fort simple : il suffit d’ajouter en fin de code les noms des fichiers PHP à désactiver en les séparant par des virgules.

Retournez ensuite dans l’éditeur de création de page de WordPress pour constater la disparition du modèle dans la liste déroulante.

Le code original est issu du forum WordPress.org et ce ne fut pas évident de trouver une telle information qui soit fonctionnelle sous la dernière version de WordPress. Faites-en bon usage !

Par Aurélien Denis

Consultant & Développeur WordPress / WooCommerce. Un site à créer, à maintenir ou à débuguer ? Contactez-moi.

13 commentaires
  1. carole

    bonjour je souhaites supprimer le blog dans le thème twentythirteen merci

  2. Seebz

    Trop marrant de voir mon code pourri réapparaître ici.
    Content aussi de voir que ca puisse vous servir.

    En espérant qu’une méthode plus propre soit possible prochaine, le filtre serait certainement une bonne solution.

    1. Aurélien Denis auteur de l’article

      Énorme en effet ! Mais ce code fonctionne bien… Car rien n’existe en natif effectivement.

  3. Julio Potier (BoiteAWeb.fr)

    Merci de l’info ça peut être bien utile. Je regrette que cela ne puisse pas être fait côté PHP, peut-être il faut proposer un filter aux devs WP ?
    A bientôt

  4. Franck

    Bonjour,

    Pour masquer un ou plusieurs modèles de page dans ce menu déroulant, j’avais pris l’habitude de simplement supprimer le nom du modèle au tout début de la page template même. Par exemple, j’ai un modèle de page dont le nom est contact.php, j’édite cette page dans le menu Apparence > Editeur, puis je supprime les premières lignes /*Template Name: Contact*/ et la balise d’encadrement php.

    Ainsi je conserve la page dans le dossier du thème, n’ajoute aucun code supplémentaire et garde la possibilité d’utiliser le menu déroulant.

    Cette méthode entraîne t’elle des complications particulières ?

    N’étant qu’un lecteur occasionnel, j’en profite pour vous adresser tous mes remerciements pour votre formidable travail sur WordPress.

    1. Aurélien Denis auteur de l’article

      Non c’est juste qu’on cherche toujours une technique pour ne pas toucher au thème parent car une mise a jour effacera tout… 😉

      1. Franck

        … et l’aventure devient tout de suite plus passionnante ainsi ! Merci.

  5. Ellouze Zied

    Salem
    La vidéo est classée comme privée sur Youtube et ne peut être visionnée.

    1. Aurélien Denis auteur de l’article

      Corrigé, fichu problème avec YouTube / Google+

  6. Daniel Roch

    Encore un très bon tutoriel que voilà. Pour ma part, j’avais déjà au le souci avec un client et j’avais tout simplement masqué en CSS le système de template. Mais ton code est bien meilleur, surtout que seuls les templates désirés sont retirés, et non pas l’ensemble.

    1. Aurélien Denis auteur de l’article

      Auparavant, je faisais même bien pire en supprimant directement les templates PHP du thème parent – ce qui casse l’esprit du thème enfant par la suite.

      Merci !

  7. Reggie

    Bonsoir,

    La vidéo est classée comme privée sur Youtube et ne peut être visionnée.

    1. Aurélien Denis auteur de l’article

      En principe c’est bon à nouveau…

Laisser un commentaire