Ich habe festgestellt, dass einige Plugins wie Contact-form-7 , Nextgen-gallery , möglicherweise andere, eine interessante Anti-Funktion haben , ihre Shortcodes nicht zu registrieren, wenn dies is_admin()
wahr ist.
Das Problem ist, wenn Sie einen dynamischen Inhalt (der möglicherweise einen Shortcode enthält) aus Ajax generieren und die "richtige" wp-Methode admin-ajax.php verwenden möchten, ist es unmöglich, dass WP_ADMIN nicht wahr ist. Siehe die ersten Zeilen von admin-ajax.php:
define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
define( 'WP_ADMIN', true );
}
Nun scheint es PHP-Erweiterungen zu geben, mit denen Sie eine definierte Konstante (hacky) aufheben können, oder es gibt eine Möglichkeit, mit dem undokumentierten WP_Screen-System herumzuspielen und $GLOBALS['current_screen']
die is_admin()
Funktion false zurückzugeben? Die am besten verwendbare Problemumgehung scheint das Posten auf der Seite oder im Site-Stammverzeichnis zu sein.
Ist es üblich, dass Plugins ihre Shortcodes registrieren, wenn sie is_admin()
falsch sind? Wenn ja, konnte ich keine andere Dokumentation oder einen anderen Grund dafür finden, als dass es sich möglicherweise um eine vorzeitige Optimierung handelt.
is_admin
ist doing_it_wrong es ist viel bessere Möglichkeiten in WP für Ajax - Anfragen zu überprüfen. Wenn das Plugin js / css in die Warteschlange stellt, hat es'wp_enqueue_scripts'
keine Auswirkungen auf die Administrationsseiten , wenn es gut funktioniert (mithilfe von Aktion), da dieser Hook auf den Verwaltungsseiten nicht ausgelöst wird.the_content
Anrufe und Admin-Ajax-Anrufe nicht beeinflussen sollten .Eigentlich gibt es keinen Grund, keine Shortcodes bei admin zu registrieren.
Wenn der Autor von Plugins das Plugin von Ajax deaktivieren möchte, sollte er dies tun
anstatt nach admin zu suchen.
Beachten Sie, dass Shortcake in Zukunft möglicherweise in den Core eingebettet wird, da es sich um ein "Feature Plugin" handelt.
In diesem Fall funktioniert der im Administrator nicht definierte Shortcode nicht. Dies gibt Ihnen eine weitere Bestätigung, dass es keinen Grund gibt, keine Shortcodes bei admin zu registrieren: Selbst Kernentwickler arbeiten an Dingen, für die Shortcodes erforderlich sind, die bei admin verfügbar sind.
Das heißt, Sie haben Möglichkeiten:
In Bezug auf # 2 gibt es tatsächlich Bibliotheken, die erzwingen können
is_admin
, wahr zu sein. Durch sie sind hackish, und ich würde diese nie in der Produktion verwenden.Ein Beispiel ist Patchwork .
Mit ihm können Sie jede benutzerdefinierte PHP-Funktion überschreiben.
In einem MU-Plugin können Sie Folgendes tun (völlig UNTESTED):
Dies macht die
is_admin()
Rückgabe bei Ajax-Anfragen falsch.Wie gesagt, dies ist jedoch ziemlich hackisch und beeinflusst das Verhalten anderer Plugins (und des Kerns) mit unvorhersehbaren Effekten.
Sie können den Plugin-Shortcode-Handler auch für Administratoranfragen registrieren.
ZB wenn der Plugin Code lautet:
dann können Sie ein anderes Plugin schreiben, das Folgendes tut:
Auf diese Weise wird in beiden Fällen der Shortcode hinzugefügt.
Dies kann je nach anderem Plugin-Code alleine funktionieren oder nicht, aber es gibt keine allgemeine Antwort darauf.
quelle
add_shortcode('shortcode', array('their-class', 'their-function') )
oder ähnlich.