web-dev-qa-db-fra.com

Existe-t-il une astuce dans la fonction get_xxxx du fichier template.php général?

Je suis un débutant dans WordPress et j'ai besoin d'une grande aide pour comprendre comment fonctionne l'action.

Il semble y avoir une relation entre l'instruction do_action et le code qui la suit dans la fonction get_xxx que je ne comprends pas. Par exemple, dans la fonction suivante:

function get_header( $name = null ) {

    do_action( 'get_header', $name );

        $templates = array();
        $name = (string) $name;
        if ( '' !== $name ) {
                $templates[] = "header-{$name}.php"; // instruction 1
        }

        $templates[] = 'header.php'; // instruction 2

        locate_template( $templates, true ); 
}

Il y a un do_action au début pour trouver header.php. Ensuite, une série de codes fait la même chose, mais pose un problème car le contenu de la variable $templates de la ligne "instruction 1" est toujours remplacé par celui de la ligne "instruction 2", car il ne s'agit pas d'un "si alors sinon".

Dans chaque fonction get_xxxx, nous avons la même structure. Je suppose qu'il existe un lien entre l'appel do_action et la série de codes qui suit, mais je ne comprends pas.

Je serai très reconnaissant si quelqu'un peut m'aider à comprendre ce problème.

2
nmc

Le do_action:

do_action( 'get_header', $name );

son déclenchant l'action get_header, ainsi toutes les actions attachées à l'aide de add_action à l'action 'get_header' seront également exécutées, en passant également le $name comme paramètre aux fonctions par exemple:

function my_function($name){
    echo "The Action sent me the name:".$name."!!";
}

add_action('get_header', 'my_function');

lorsque la do_action( 'get_header', $name ); est exécutée, my_function sera appelé avec $name en tant que paramètre. Ainsi, vous pourrez faire "quelque chose" avant que le modèle d'en-tête ne soit chargé.

instruction 2 ne remplace pas instruction 1 en ajoutant le 'header.php' par défaut au tableau comme solution de repli. Si vous appelez un en-tête personnalisé, le tableau $templates sera comme ceci (en utilisant get_header('custom');):

Array
(
    [0] => header-custom.php
    [1] => header.php
)

Locate_template essaiera de trouver et de charger avec require_once le premier modèle. S'il n'existe pas ou ne peut pas être trouvé, il se repliera sur header.php et essaiera de charger celui-là aussi.

2
David Lee