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 fonctionelle sous la dernière version de WordPress. Faites-en bon usage !