W function.php mojego motywu nazywam add działań, aby uzyskać kontrolę nad tym, gdzie ładowana jest jquery (w stopce wraz z innymi skryptami mojego motywu).
Problem, jaki mam, polega na tym, że kiedy używam add działań („wp_enqueue_scripts”), wydaje się, że jest uruchamiany tylko wtedy, gdy nie są załadowane żadne wtyczki. Jednak metoda add Działalności („init”) działa we wszystkich przypadkach.
Nie pamiętam, dlaczego, ale uważam, że w tym przypadku preferowane jest działanie dodatkowe („wp_enqueue_scripts”). Jeśli to prawda, jak mogę sprawić, by działał we wszystkich przypadkach?
W functions.php
//if(!is_admin()){add_action('init', 'my_theme_init');} //THIS WORKS ALL THE TIME
//add_action('wp_enqueue_scripts', 'my_theme_init'); //THIS ONLY WORKS WHEN NO PLUGINS PRESENT
if(!is_admin())
{
require_once(TEMPLATEPATH . '/functions_public.php');
}
W functions_public.php
function my_theme_init()
{
/* PREVENT DUPLICATE COPIES OF JQUERY FROM PLUGINS
**************************************************/
wp_deregister_script('jquery');
/* LOAD THE LOCAL WORDPRESS COPY OF JQUERY AND THEME CUSTOM SCRIPTS IN THE FOOTER
***********************************************/
wp_register_script('jquery', get_bloginfo('template_directory').'/scripts.mythemescripts.js',false,false,true);
wp_enqueue_script('jquery');
}
Druga metoda, wykorzystująca add działań („wp_enqueue_scripts”) najwyraźniej nie jest wykonywana w warunkach, w których występuje wtyczka, która wypisuje zależności skryptu od motywu.
źródło
Odpowiedzi:
Wielu programistów wtyczek nie robi rzeczy we właściwy sposób. Prawo sposobem jest hak na
wp_enqueue_scripts
jak starasz się zrobić.Oto kolejność haków uruchamianych w typowym żądaniu:
Chodzi o to, że kilku programistom pierwotnie powiedziano, aby przyłączyli się do
init
kolejkowania swoich skryptów. Wcześniej, zanim mieliśmywp_enqueue_script
haczyk, był to „właściwy” sposób robienia rzeczy, a samouczki podtrzymujące tę praktykę wciąż krążą w Internecie, niszcząc w przeciwnym razie dobrych programistów.Radzę podzielić twoją funkcję na dwie części. Wykonaj
wp_deregister_script
/wp_register_script
nainit
haku i użyjwp_enqueue_scripts
haka, gdy faktycznie kolejkujesz jQuery.Dzięki temu będziesz w świecie „robienia tego dobrze” przy kolejkowaniu skryptów i pomoże chronić cię przed setkami programistów, którzy nadal „robią to źle”, zamieniając jQuery na twoją skonkatenowaną wersję, zanim dodadzą ją do kolejki .
Będziesz także chciał dodać
init
hak o wysokim priorytecie:źródło
priority
dodawaniu akcji. Wszystko zależy od tego, jak widzisz priorytet. Jeśli chcesz, aby Twój „działał jako pierwszy”, lepsza jest mniejsza liczba - wyższy priorytet w kolejce wykonywania. Ale jeśli chcesz, aby efekt twojej funkcji miał pierwszeństwo przed innymi, będziesz chciał, aby działała później - więc wyższy priorytet ma „efekt”. I w tym przypadku jest to prawdopodobnie wyższa liczba, niż chcesz. Mimo że zamiana jquery w RTM jest niewielka, jak sugeruje poprzedni komentator.Istnieje wiele problemów, które są ze sobą powiązane.
wp_enqueue_scripts
wp_enqueue_script()
, ustaw$footer
parametr natrue
add_action( $hook, $callback )
rozmowy nie powinny być w nic zamknięte; niech wykonują bezpośrednio zfunctions.php
is_admin()
kontrole warunkowe w swoim callbackuwp_enqueue_scripts
jest już za późno . Podziel swój kod wyrejestrowania / rejestru na zaczepione połączenie zwrotneinit
.get_template_directory()
raczej niżTEMPLATEPATH
Kładąc wszystko razem:
Ale znowu: to nie jest najlepsze podejście. Lepiej jest po prostu usunąć wywołania zwrotne add action (), które wyrejestrowują rdzeń jQuery - lub używają wtyczek, które nie robią czegoś tak lekkomyślnego, jak zastąpienie pakietu jQuery w pakiecie.
źródło
_doing_it_wrong()
jest nazywanie czegoś, co nie jest po prostu jQuery, „jQuery”. Ponadto: samą aplikację jQuery można po prostu usunąć z kolejki , aby mieć pewność, że nie zostanie załadowana dwukrotnie.wp_dequeue_script()
Wezwanie po prostu musi się dziać z wystarczającą priorytet, aby zapewnić, że nic go kolejkuje później.