J'ai remarqué que certains plugins tels que Contact-form-7 , Nextgen-gallery , peut-être d'autres, ont une anti-fonctionnalité intéressante de ne pas enregistrer leurs shortcodes quand is_admin()
c'est vrai.
Le problème est que, si vous voulez générer du contenu dynamique (qui peut avoir un shortcode) à partir d'ajax et utiliser la manière wp "correcte" de le faire, admin-ajax.php, il est impossible de ne pas avoir WP_ADMIN vrai. Voir les premières lignes de admin-ajax.php:
define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
define( 'WP_ADMIN', true );
}
Maintenant, il semble qu'il y ait des extensions PHP qui vous permettront de dé-définir une constante définie (hacky), ou il pourrait y avoir un moyen de jouer avec le système WP_Screen non documenté et $GLOBALS['current_screen']
de faire en sorte que la is_admin()
fonction retourne faux ?? La solution de contournement la plus utilisable semble être la publication sur la page ou la racine du site.
Est-il courant que les plugins enregistrent leurs shortcodes quand is_admin()
c'est faux? Si c'est le cas, je n'ai trouvé aucune documentation ou raison autre que celle-ci, il peut s'agir d'une optimisation prématurée.
is_admin
est en train de faire_it_wrong il y a de bien meilleures façons dans WP de vérifier les requêtes ajax. Enfin, si le plugin met en file d'attente js / css, s'il le fait bien (en utilisant l''wp_enqueue_scripts'
action), cela n'affectera pas les pages d'administration car ce hook n'est pas déclenché dans les pages d'administration.the_content
appels et les appels admin-ajax.En fait, il n'y a aucune raison de ne pas enregistrer de shortcodes sur admin.
Si l'auteur des plugins souhaite désactiver le plugin sous Ajax, il doit le faire
au lieu de vérifier est admin.
Notez qu'à l'avenir, il est possible que Shortcake soit intégré dans le noyau car il s'agit d'un "Plugin de fonctionnalités".
Si cela se produit, le shortcode non défini dans admin ne fonctionnera pas avec. Cela vous donne une autre confirmation qu'il n'y a aucune raison de ne pas enregistrer les shortcodes sur admin: même les développeurs principaux travaillent sur des choses qui nécessitent des shortcodes disponibles sur admin.
Cela dit, vous avez des possibilités:
Concernant # 2, il existe en fait des bibliothèques qui peuvent forcer
is_admin
à être vraies. Par elles sont hackish, et je ne les utiliserais jamais en production.Un exemple est Patchwork .
En l'utilisant, vous pouvez remplacer toute fonction personnalisée PHP.
Dans un plugin MU, vous pouvez faire (complètement non testé):
Cela rendra le
is_admin()
retour faux sur les requêtes ajax.Cependant, comme dit, c'est assez hackish et affectera le comportement d'autres plugins (et core) avec des effets imprévisibles.
Une autre chose que vous pouvez faire est d'enregistrer le gestionnaire de shortcode de plugin sur les demandes d'administration.
Par exemple, si le code du plugin est:
alors vous pouvez écrire un autre plugin qui fait:
De cette façon, le shortcode sera ajouté dans les deux cas.
Cela peut ou non fonctionner seul en fonction d'un autre code de plugin, mais il n'y a pas de réponse générale à cela.
la source
add_shortcode('shortcode', array('their-class', 'their-function') )
ou similaire.