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

Mis à jour le :

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 !

Avatar de Aurélien Denis

Protégez votre site WordPress

Vos données sont précieuses,
ne prenez pas le risque de tout perdre.
Confiez-moi votre maintenance !

Ces articles devraient t’intéresser…

13 réponses
  1. Avatar de carole
    carole

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

  2. Avatar de Seebz
    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. Avatar de Aurélien Denis
      Aurélien Denis

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

  3. Avatar de Julio Potier (BoiteAWeb.fr)
    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. Avatar de Franck
    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. Avatar de Aurélien Denis
      Aurélien Denis

      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. Avatar de Franck
        Franck

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

  5. Avatar de Ellouze Zied
    Ellouze Zied

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

    1. Avatar de Aurélien Denis
      Aurélien Denis

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

  6. Avatar de Daniel Roch
    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. Avatar de Aurélien Denis
      Aurélien Denis

      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. Avatar de Reggie
    Reggie

    Bonsoir,

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

    1. Avatar de Aurélien Denis
      Aurélien Denis

      En principe c’est bon à nouveau…