web-dev-qa-db-fra.com

Que puis-je accrocher à after_setup_theme?

Je me demande ce que je peux ou ne dois-je PAS accrocher à after_setup_theme? Je me demande, car on m'a dit que je ne devrais pas y accrocher wp_enqueue_style, mais j'ai vu d'autres endroits l'utiliser pour accrocher wp_enqueue_script ici: http://justintadlock.com/archives/2010/12/30/ wordpress-theme-theme-function-files

D'après ce que j'ai compris, il ne s'agit que de choses qui dépendent du thème. Il est donc difficile de comprendre pourquoi je ne devrais pas utiliser wp_enqueue_style dans celui-ci?

Puis-je jeter des trucs comme ça là aussi?

add_action('get_header', 'enable_threaded_comments');
add_action('widgets_init', 'unregister_default_wp_widgets', 1);
remove_action('wp_head', 'rsd_link');

Merci!

2
Brett

Pensez à l’exécution de WordPress comme une série d’échelons sur une échelle: WordPress gravit l’un après l’autre, puis le suivant, puis le suivant, et ainsi de suite.

Pensez aux crochets d'action comme aux barreaux eux-mêmes. Voici une liste (légèrement abrégée, je pense) de ces actions, ou "réseaux" exécutés au cours d'une requête WordPress typique.

Ainsi, un appel add_action() est simplement une instruction pour exécuter une fonction sur un réseau spécifique du ladder. Tant que vous make que add_action() appelez sur une ligne plus tôt que l'exécution sur laquelle vous voulez que la fonction spécifiée soit execute , peu importe, en soi la ligne que vous utilisez pour make l'appel add_action(). Cependant, il y a sont des raisons d'utiliser des réseaux spécifiques pour exécuter des fonctions .

Pour prendre votre exemple: le fichier functions.php d'un thème s'exécute à (je crois) after_setup_theme. Donc, vous ne pouvez simplement pas utiliser un thème pour ajouter une action à un réseau antérieur à after_setup_theme, car WordPress a déjà exécuté ces actions (c'est-à-dire que WordPress a déjà gravi ces "réseaux" sur l'échelle).

Si vous essayez d'exécuter wp_enqueue_script() dans un rappel lié à une action avant init, WordPress générera un avis _doing_it_wrong(), car wp_enqueue_script() ne doit pas être exécuté avant init, et le plus correctement devrait être exécuté wp_enqueue_scripts (frontal) ou admin_enqueue_scripts-{hook} (admin).

Toutefois:

Puis-je jeter des trucs comme ça là aussi?

add_action('get_header', 'enable_threaded_comments');
add_action('widgets_init', 'unregister_default_wp_widgets', 1);
remove_action('wp_head', 'rsd_link');

Tous ces éléments conviennent parfaitement à l'appel à after_setup_theme, car toutes les actions spécifiées sont déclenchées par plus tard que after_setup_theme. Avec add_action(), vous dites simplement à WordPress: " mettez ce rappel en file d'attente à l'action spécifiée ." Avec remove_action(), vous dites simplement à WordPress: " supprime ce rappel de l'action spécifiée ."

Modifier

En re:

Super réponse - merci. Je comprends la plupart des choses, mais je ne comprends pas pourquoi tous mes appels sur les hooks avec add_action et remove_action sont ok mais l’appel à wp_enqueue_scripts ne l’est pas? Ils tirent tous après after_setup_theme. Je sais que vous avez dit que c’est parce que je ne peux pas exécuter wp_enqueue_scripts avant init; mais sans que tu me dises comment je le saurais? Par exemple, comment puis-je savoir si quelque chose d'autre ne peut pas être exécuté avant quelque chose d'autre?.

Parce que add_action() simplement met en file d'attente un rappel, à l'intérieur duquel les fonctions sont réellement exécutées. Mais des fonctions telles que wp_enqueue_script() ou wp_enqueue_style() sont en réalité functions , que execute où que vous les appeliez.

5
Chip Bennett

Je recommanderais de vérifier comment d'autres thèmes utilisent after_setup_theme hook pour avoir une idée générale, consultez functions.php de thèmes comme Twenty Eleven et Underscores (_s).

after_setup_theme est principalement utilisé pour charger des fichiers de fonctionnalité de thème, enregistrer le support pour diverses fonctionnalités telles que, publier des vignettes et des formats de publication, charger des fichiers de traduction, etc. Vous pouvez également enregistrer une action et un filtre sur la configuration du thème, mais j'aime les garder à proximité des fonctions de rappel.

Les fonctions wp_enqueue_script() et wp_enqueue_style() doivent être reliées à l'action appropriée - wp_enqueue_scripts

2
Mamaduka

Vous ne devez pas y accrocher les appels de fonction wp_enqueue_style, car il existe d'autres points d'ancrage d'actions plus appropriés.

Spécifiquement, si vous avez besoin de mettre en file d'attente sur le frontal du site, vous devez vous connecter au hook "wp_enqueue_scripts". Si vous devez mettre quelque chose en file d'attente du côté administrateur du site, vous devez vous connecter à la connexion "admin_enqueue_scripts".

2
Otto