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