2012-08-07 17 views
21

Czy ktoś mógłby mi pomóc, co jest właściwą metodą nadpisywania podstawowych plików Javascript WooCommerce, w szczególności plików frontend. Nie znalazłem żadnej dokumentacji na ten temat i patrząc na kod, ścieżka do plików skryptów frontendu jest zakodowana w wtyczce, więc wątpię, żeby umieszczenie folderu zasobów w moim motywie zrobiło cokolwiek.Zastąpić WooCommerce Frontend JavaScript

Jaki jest najczystszy sposób na to, abym mógł załadować plik znajdujący się w katalogu tematycznym?

Dzięki

+0

Czy chcesz całkowicie wyłączyć ich włączony lub przesłanianie szczególne zachowanie lub wydarzenie? –

+0

Cóż, zamierzałem całkowicie zastąpić plik javascript (add-to-cart-variation.js), ponieważ jest kilka zmian, które muszę wprowadzić. – Sebastien

+1

W tym pliku wygląda na to, że tylko dwa zdarzenia są związane z gotowym dokumentem. Możesz po prostu odpiąć je w swoim własnym scenariuszu. line-4 i line-216 https://github.com/woothemes/woocommerce/blob/master/assets/js/frontend/add-to-cart-variation.js. Nie współpracowałem z tą wtyczką, ale zakładam, że możesz również ręcznie zmodyfikować ten plik. –

Odpowiedz

27

miałem ten sam problem, z wyjątkiem dodatku do cart.js. Prostym rozwiązaniem jest DEQUEUE skrypt woocommerce i ENQUEUE swojego zamiennika. W moim przypadku I dodaje następujące do mojego functions.php:

wp_dequeue_script('wc-add-to-cart'); 
wp_enqueue_script('wc-add-to-cart', get_bloginfo('stylesheet_directory'). '/js/add-to-cart-multi.js' , array('jquery'), false, true); 

byłoby Chcesz rozkolejkowania z 'WC-add-to-Cart-zmienności' skrypt. Nie sądzę, że masz ma na ENQUEUE o tej samej nazwie, ale nie widziałem powodu, aby nie.

Mam nadzieję, że to pomoże.

Jeśli używasz WordPress w wersji 4.0.1 i WooCommerce w wersji 2.2.10. Można stosować następujące scenariusze:

 

wp_deregister_script('wc-add-to-cart'); 
wp_register_script('wc-add-to-cart', get_bloginfo('stylesheet_directory'). '/js/add-to-cart-multi.js' , array('jquery'), WC_VERSION, TRUE); 
wp_enqueue_script('wc-add-to-cart'); 
 
+4

"Lepiej", aby dodać do kolejki o tej samej nazwie, więc nie złamiesz żadnej zależności może mieć. – Leonel

+2

Jeśli spróbujesz wykonać kolejkę z tym samym uchwytem, ​​to oryginalny plik będzie nadal zapisywany w kolejce, chyba że wyrejestrujesz oryginalny uchwyt 'wp_dequeue_script()' zanim ponownie go umieścisz. – cfx

+0

Czy możesz sprawdzić moje pytanie również http://wordpress.stackexchange.com/questions/215238/how-to-add-quick-edit-in-woocommerce-order-section –

1

Dodaj tę sekcję do function.php

function themeslug_enqueue_script() { 
wp_enqueue_script('add-to-cart-variation', get_bloginfo('url'). '/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.js', false); 
} 
add_action('wp_enqueue_scripts', 'themeslug_enqueue_script'); 
19

woocommerce skrypty ładunki frontend i style w class-wc-frontend-scripts.php pliku i tam można znaleźć, jak skrypty są zarejestrowane, Enqueued, zlokalizowane i zależności.

Preferowanym miejscem do wpisywania skryptów w Wordpress jest hak akcji wp_enqueue_scripts, ponieważ jest to moment po pełnym załadowaniu Wordpress, ale przed wykonaniem jakichkolwiek danych wyjściowych. A także lubię dołączać wszystkie moje powiązane scenariusze i style w jednej sekcji kodu.

Jeśli chcesz całkowicie usunąć niektóre skrypty, wystarczy zadzwonić pod numer wp_deregister_script() lub wp_dequeue_script(). Ale czasami, jeśli chcesz wprowadzić pewne zmiany i pozostawić istniejące zależności, zmienne i lokalizację, istnieje problem, ponieważ wtyczki są ładowane przed motywami. Więc funkcje kolejkowania nie będą działać tak, jak byś tego oczekiwał. Proste wp_dequeue_script() => wp_enqueue_script() będzie not work, wp_deregister_script() => wp_register_script() będzie działać, ale zlokalizowane dane zostaną utracone.


ten może być rozwiązany przez pracę bezpośrednio z $wp_scripts globalnego obiektu, który zawiera i zarządza wszystkie skrypty ładowane przez wp_enqueue_script() lub zarejestrowana wp_register_script():

add_action('wp_enqueue_scripts', 'load_theme_scripts'); 

    function load_theme_scripts() { 
     global $wp_scripts; 
     $wp_scripts->registered[ 'wc-add-to-cart' ]->src = get_template_directory_uri() . '/woocommerce/js/wc-add-to-cart.js'; 
    } 
+0

Ostatni działa dla mnie, pakiet podziękowań –

+0

Podobała mi się opcja '$ wp_scripts', ponieważ w ten sposób nie przeszkadzam/nie potrzebuję zawracać sobie głowy zależnościami lub wersjami skryptów. +1 –

+0

To jest naprawdę niesamowita odpowiedź! Nie miałem pojęcia, że ​​możesz pracować lub że istnieje nawet obiekt '$ wp_scripts', który możesz zmodyfikować. To jest niesamowite! Chcę ci kupić piwo! – Radmation