2013-10-03 13 views
5

Ustawiam sposób, aby zachować preferowany sposób pracy z JSJ i zintegrować go z Wordpress.Używanie requireJS w WordPressie

Dużym problemem jest to, jak załadować jquery. Wordpress ładuje jQuery za pośrednictwem wp_enqueue_script, który musi pozostać taki, ponieważ niektóre wtyczki Wordpress, które regularnie używam, wymagają dodania jquery. Nie chcę następnie ładować drugiej wersji jQuery w mojej instalacji requireJS. Tak więc, po pewnym rozglądać to co mam wymyślić:

szablonów/footer.php

<script> 
if (typeof jQuery === 'function') { 
    define('jquery', function() { return jQuery; }); 
} 

require(['/assets/js/sample-common.js'], function (common) { 
    require(['sample-bootstrapper']); 
}); 
</script> 

Jakie widzi jeśli jQuery został już dodany do strony, jeśli to było to ustawia go jako wartość modułu.

Moje pytanie brzmi, mam to po prostu zostawić jQuery być w globalnej przestrzeni nazw, lub wykonaj następujące czynności:

http://requirejs.org/docs/jquery.html#noconflictmap

Problem z powyższym to będę pewnie musiał zawierać pluginy jquery że Aren Zgodny z AMD, czy warto dążyć do tego, aby były kompatybilne z AMD, czy też innym rozwiązaniem, o którym myślałem, było usunięcie prawdziwości z deklaracji noConflict, która zachowuje "jQuery" w globalnym obszarze nazw, umożliwiając działanie wtyczek.

To mniej pytanie, a raczej zaproszenie do porad dotyczących najlepszych praktyk. I każdy byłby mile widziany!

Dzięki!

+0

Myślę, że nadal trzeba umieścić "jquery" w swoim wymaganiu, oprócz zdefiniowania go nie? – WraithKenny

Odpowiedz

0

WordPress kolejkuje jQuery, ponieważ jest to skrypt, należy zrobić to samo dla Ciebie własne skrypty, ponieważ oznacza to, że WordPress może bezpiecznie obsłużyć zależności dla Ciebie. Należy również zauważyć, że dołączony jQuery WordPressa jest już załadowany w trybie noConflict(), aby zapobiec konfliktom wtyczek.

JEŚLI podasz jQuery jako jedną z zależności skryptu, WordPress doda go do dowolnej strony, która doda skrypt, który jest od niego zależny - ale tylko wtedy, gdy nie został już załadowany (nie doda go drugi raz).

AKTUALIZACJA: Zgodnie z komentarzem @brasofilo funkcja get_stylesheet_directory() przeszukuje dziecko, a następnie rodzica, jeśli nic nie istnieje w dziecku. Bezpieczny w użyciu get_stylesheet_directory() w sytuacjach związanych z rodzicami i dziećmi.

Zrobione z kodeksu WP i modyfikowany: http://codex.wordpress.org/Function_Reference/wp_enqueue_script

/** 
* Proper way to enqueue scripts and styles 
*/ 
function theme_name_scripts() { 
    wp_enqueue_script('script-name', get_template_directory_uri() . '/assets/js/sample-common.js', array('jquery'), '1.0.0', true); 
} 

add_action('wp_enqueue_scripts', 'theme_name_scripts'); 

Warto zauważyć tutaj, że jeśli skrypt jest w katalogu tematycznego dziecko to należy zamienić się get_template_directory_uri() i zastąpić go get_stylesheet_directory_uri().

+1

'get_stylesheet_' wyszukuje dziecko, a jeśli nie istnieje, wyszukiwanie rodziców, tj. Może być bezpiecznie użyte w każdych okolicznościach. – brasofilo

+0

Może to powinno być odnotowane w sekcji o parametrze '$ src' na stronie kodeksu, którą połączyłem ... dzięki za wskazanie @brasofilo :) –

+1

Dzięki za odpowiedź William. Rozumiem, że powinienem trzymać się wp_enqueue_script dla całego mojego ładowania skryptu, ale wolałbym trzymać się wymagającego JS, ponieważ w ten sposób koduję poza Wordpress i gdy buduję szablony przed integracją ich w WP, nie chcę refaktoryzować kod do dopasowania. – FlimFlam