Zauważyłem, że niektóre wtyczki, takie jak Contact-form-7 , Nextgen-gallery , ewentualnie inne, mają ciekawą funkcję anty-rejestrowania swoich krótkich kodów, gdy is_admin()
jest to prawdą.
Problem polega na tym, że jeśli chcesz wygenerować dynamiczną zawartość (która może mieć krótki kod) z ajax i użyć „poprawnego” sposobu wp, admin-ajax.php, niemożliwe jest, aby WP_ADMIN nie było prawdziwe. Zobacz pierwsze wiersze admin-ajax.php:
define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
define( 'WP_ADMIN', true );
}
Teraz wydaje się, że istnieją rozszerzenia PHP, które pozwolą ci cofnąć zdefiniowaną stałą (hacky), lub może istnieć sposób na bałagan z nieudokumentowanym systemem WP_Screen i $GLOBALS['current_screen']
sprawienie, że is_admin()
funkcja zwróci false? Najbardziej użytecznym obejściem wydaje się być publikowanie na stronie lub w katalogu głównym witryny.
Czy wtyczki często rejestrują swoje krótkie kody, gdy is_admin()
są fałszywe? Jeśli tak, to nie mogłem znaleźć żadnej dokumentacji ani innego powodu niż przedwczesna optymalizacja.
is_admin
to źle, istnieją w WP lepsze sposoby sprawdzania żądań ajax. Wreszcie, jeśli wtyczka kolejkuje plik js / css, jeśli zrobi to dobrze (za pomocą'wp_enqueue_scripts'
akcji), nie wpłynie to na strony administracyjne, ponieważ ten zaczep nie jest uruchamiany na stronach administracyjnych.the_content
wywołania i wywołania admin-ajax.Właściwie nie ma powodu, aby nie rejestrować skrótów w adminie.
Jeśli autor wtyczek chce wyłączyć wtyczkę z Ajax, powinien to zrobić
zamiast sprawdzać to admin.
Zauważ, że w przyszłości możliwe jest, że Shortcake zostanie osadzony w rdzeniu, ponieważ jest to „wtyczka funkcji”.
Jeśli tak się stanie, krótki kod niezdefiniowany przez administratora nie będzie z nim działał. To daje ci kolejne potwierdzenie, że nie ma powodu, aby nie rejestrować skrótów w adminie: nawet programiści pracują nad rzeczami, które wymagają skrótów dostępnych w adminie.
To powiedziawszy, musisz mieć możliwości:
Jeśli chodzi o # 2, faktycznie istnieją biblioteki, które mogą wymusić
is_admin
prawdziwość. Przez to, że są hackerskie i nigdy nie użyłbym ich w produkcji.Przykładem jest Patchwork .
Za jego pomocą możesz zastąpić dowolną niestandardową funkcję PHP.
We wtyczce MU możesz (całkowicie NIETESTOWANY):
Spowoduje to, że
is_admin()
zwrot będzie fałszywy dla żądań ajax.Jednak, jak powiedziano, jest to dość hackerskie i wpłynie na zachowanie innych wtyczek (i rdzenia) z nieprzewidywalnymi efektami.
Inną rzeczą, którą możesz zrobić, to zarejestrować moduł obsługi krótkiego kodu wtyczki na żądanie administratora.
Np. Jeśli kod wtyczki to:
Następnie pan może napisać inną wtyczkę, która robi:
W ten sposób shortcode zostanie dodany w obu przypadkach.
To może, ale nie musi działać samodzielnie, w zależności od innego kodu wtyczki, ale nie ma na to ogólnej odpowiedzi.
źródło
add_shortcode('shortcode', array('their-class', 'their-function') )
lub podobnie.