web-dev-qa-db-fra.com

Comment ajouter un support de thème?

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.

1
Bryan Willis

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.

NOTE IMPORTANTE

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

CONCLUSION

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

2
Pieter Goosen