WordPress : Comment *supprimer* un template de page de thème parent d’un thème enfant ?
J’utilise le thème TwentyTen pour créer un thème enfant, mais je n’arrive pas à me débarrasser du modèle de page « Une colonne, pas de barre latérale » qui se trouve dans le thème parent TwentyTen.
Je pensais que le copier et supprimer le contenu ferait l’affaire, mais il semble que non. Est-ce que quelqu’un sait comment faire ça? Je suis sûr que c’est très simple.
Merci
osu
Solution n°1 trouvée
Remplacer ce modèle serait beaucoup plus facile que de s’en débarrasser. Juste la façon dont la logique va.
Je ne prétends pas que c’est une idée efficace (en retard ici), mais cela l’obtiendrait à partir de l’écran d’édition :
add_action('admin_head-post.php','remove_template');
function remove_template() {
global $wp_themes;
get_themes();
$templates = &$wp_themes['Twenty Ten']['Template Files'];
$template = trailingslashit( TEMPLATEPATH ).'onecolumn-page.php';
$key = array_search($template, $templates);
unset( $templates[$key] );
}
Solution n°2 trouvée
WordPress 3.9 introduit un theme_page_templates
filtre.
L’exemple ci-dessous issu d’un thème enfant Twenty Fourteen functions.php
montre comment supprimer le template « Contributor Page » :
function tfc_remove_page_templates( $templates ) {
unset( $templates['page-templates/contributors.php'] );
return $templates;
}
add_filter( 'theme_page_templates', 'tfc_remove_page_templates' );
Solution n°3 trouvée
En développant la réponse de @Rarst, voici une approche plus générique qui n’est pas liée à un thème spécifique, mais qui peut être utilisée dans le fichier functions.php de votre propre thème enfant pour supprimer tous les modèles de page de thème parent dont vous souhaitez vous débarrasser.
function remove_template( $files_to_delete = array() ){
global $wp_themes;
// As convenience, allow a single value to be used as a scalar without wrapping it in a useless array()
if ( is_scalar( $files_to_delete ) ) $files_to_delete = array( $files_to_delete );
// remove TLA if it was provided
$files_to_delete = preg_replace( "/.[^.]+$/", '', $files_to_delete );
// Populate the global $wp_themes array
get_themes();
$current_theme_name = get_current_theme();
// Note that we're taking a reference to $wp_themes so we can modify it in-place
$template_files = &$wp_themes[$current_theme_name]['Template Files'];
foreach ( $template_files as $file_path ){
foreach( $files_to_delete as $file_name ){
if ( preg_match( '//'.$file_name.'.[^.]+$/', $file_path ) ){
$key = array_search( $file_path, $template_files );
if ( $key ) unset ( $template_files[$key] );
}
}
}
}
Vous pouvez donc l’utiliser dans le fichier functions.php de votre thème enfant comme ceci :
add_action( 'admin_head-post.php', 'remove_parent_templates' );
function remove_parent_templates() {
remove_template( array( "showcase.php", "sidebar-page" ) );
}
Ici, je ne fais qu’illustrer que vous n’êtes pas obligé de passer la partie « .php » si vous ne le souhaitez pas.
Soit : remove_template( "sidebar-page" );
– vous n’avez pas besoin de passer un tableau si vous ne souhaitez modifier qu’un seul fichier.
0 commentaire