web-dev-qa-db-fra.com

get_header et hook évitent les appels normaux

J'aimerais utiliser un en-tête personnalisé, tel que get_header('new')

Mais je ne peux pas modifier facilement les modèles où les appels sont faits pour plusieurs raisons. (plusieurs fichiers et la même base de code déployés sur plusieurs domaines différents, certains domaines ne devant pas charger le nouvel en-tête et utiliser les mêmes modèles, je souhaite donc charger le nouvel en-tête sur un emplacement avec une condition basée sur le domaine)

Existe-t-il un moyen de raccrocher et d’appeler la fonction d’en-tête avec le paramètre moi-même, mais PAS ensuite l’appel par défaut habituel?

function new_get_header(){
    get_header('new');
    //die or something
}
add_action('get_header', 'new_get_header');

Tous les conseils appréciés.

1
Sanne

Non, vous ne pouvez malheureusement pas le faire, car get_header( $name ) ne dispose pas de filtre pour le $name (il ne transmet que le nom avec l'appel à l'action).

Toutefois, si vous êtes prêt à modifier le fichier header.php pour chaque site avec quelque chose comme ceci au début du fichier:

<?php
if ( apply_filters( 'load_custom_header', false ) ) {   
    $custom_header = apply_filters( 'get_custom_header', '' );

    if ( '' != $custom_header ) {       
        // Get the header that we just received
        // and call the native 'get_header' function
        // as usual
        get_header( $custom_header );

        // By calling 'return' we are skipping
        // parsing this template any further        
        return;
    }
}

Vous pouvez ensuite contrôler quel en-tête charger comme ceci (vous pouvez soit placer ce code dans un plugin ou dans le fichier functions.php):

// We are hooking to the 'load_custom_header' filter 
// and return a value of 'true' meaning that we want to 
// load a custom header
add_filter( 'load_custom_header', '__return_true', 99 );

add_filter( 'get_custom_header', function( $header ) {
    // Figure out what header you want
    $some_condition = true;

    if ( $some_condition ) {
        $header = 'new';            
    } 

    return $header;
}, 99 );

L'avantage évident est que vous n'avez pas à modifier tous les appels get_header à partir de tous les modèles: single.php, page.php, etc., vous les contrôlez tous à un seul endroit.

2
webtoure