WordPress : Comment *supprimer* un template de page de thème parent d’un thème enfant ?

Publié par Jean-Michel le

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_templatesfiltre.

L’exemple ci-dessous issu d’un thème enfant Twenty Fourteen functions.phpmontre 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.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *