Je pensais que cela aurait déjà été une question, mais je ne l'ai pas rencontrée.
Je me demande quel est le bon crochet pour vérifier la prise en charge du thème se trouve dans un thème et dans un plugin.
function my_theme_or_plugin_add_theme_support_feature()
if (current_theme_supports( $feature )) {
add_action( $hook, $function_to_add, $priority, $accepted_args );
add_filter( $tag, $function_to_add, $priority, $accepted_args );
}
}
add_action( $hook, 'my_theme_or_plugin_add_theme_support_feature');
Donc, dans l'exemple ci-dessus, quand/où le my_theme_or_plugin_add_theme_support_feature
doit-il vérifier, s'exécuter dans des thèmes et des plugins et est-ce nécessaire? Est-ce la même chose pour les deux?
Exemples:
add_action( 'wp_loaded', 'my_theme_or_plugin_add_theme_support_feature');
add_action( 'init', 'my_theme_or_plugin_add_theme_support_feature');
add_action( 'after_setup_theme', 'my_theme_or_plugin_add_theme_support_feature');
Mise à jour:
En fait, je viens de trouver cette question , qui est très similaire.
En outre, voici une question similaire que j'ai posée ici et que j'ai pu comprendre en utilisant add_theme_support
dans un plugin ... cependant, cela ne fonctionne pas 100 % du temps.
Cela dépend vraiment de ce que vous devez faire ici. La méthode générale consiste à associer toutes vos fonctionnalités de support de thème à after_setup_theme
pour des raisons évidentes.
after_setup_theme
est le premier crochet d’action disponible pour les thèmes pour ajouter un type de support au thème. Certaines fonctionnalités doivent être enregistrées ici et ne peuvent pas être enregistrées plus tard. Une caractéristique qui saute à l’esprit est la prise en charge des formats de publication. post_format
est une taxonomie intégrée qui est enregistrée sur init
. Si nous sautons les actions suivantes:
auth_cookie_malformed
auth_cookie_valid
set_current_user
init
sera le prochain hook après after_setup_theme
pour faire des trucs liés aux plugins et aux thèmes. Comme post_format
sont enregistrés sur init
, l'ajout de la prise en charge des thèmes ici sera trop tard, avec une priorité erronée. Donc, si vous devez vérifier la prise en charge des thèmes pour les formats de publication, vous devez le faire sur after_setup_theme
avec une priorité très faible. J'ai tendance à utiliser la valeur constante PHP_INT_MAX
en priorité ou PHP_INT_MAX + 1
. Vous pouvez aussi peut-être essayer set_current_user
qui fonctionne après after_setup_theme
et juste avant init
En règle générale, toutes les fonctionnalités de prise en charge de thème intégrées sont exécutées sur after_theme_support
pour conserver la cohérence de votre code, mais vous ne devez pas vous fier à cela du tout. Comme @ toscho est décrit dans sa réponse ici , wp_loaded
est un excellent point à utiliser pour vérifier si une fonctionnalité donnée est déjà prise en charge ou non ( il existe des exceptions, voir la note ci-dessous ). Au moment où wp_loaded
se déclenche, toutes les fonctionnalités de support de thème devraient avoir été ajoutées. Sinon, ce thème fait vraiment très mal et vous ne pouvez vraiment pas compromettre votre code pour l'ajuster à un mauvais thème. Tous les points d'ancrage après wp_loaded
sont concernés par la sortie du contenu et la manipulation de la sortie qui sera envoyée au navigateur.
Comme je l'ai déjà indiqué, certaines fonctionnalités, telles que la prise en charge du format de publication, ne peuvent pas être ajoutées à init
ni à aucun crochet après, car il est trop tard, donc wp_loaded
serait beaucoup trop tard pour ajouter une prise en charge de thème pour les formats de publication. Comme je l’ai déjà dit, vous devez accrocher votre fonction le plus tard possible à after_setup_theme
Il y a maintenant un bon crochet à utiliser ici. Le raccordement dépend de la fonctionnalité de support. En général, il serait prudent d’utiliser wp_loaded
pour rechercher une fonctionnalité de support spécifique personnalisée et, à mon avis, ce serait le dernier hook vous devriez utiliser pour ajouter tout type de fonctionnalité de support de thème. after_setup_theme
avec une priorité très faible ( ou même set_current_user
) devrait suffire car init
est trop tard pour ajouter des fonctionnalités telles que les formats de publication