2012-08-07 35 views
21

Có thể ai đó hướng dẫn tôi về phương pháp thích hợp ghi đè các tệp Javascript lõi của WooCommerce, cụ thể là các tệp giao diện người dùng. Tôi đã không tìm thấy bất kỳ tài liệu nào về điều này và xem mã, đường dẫn đến tệp tập lệnh lối vào được mã hóa cứng trong plugin nên tôi nghi ngờ rằng việc đặt một thư mục tài sản trong chủ đề của tôi sẽ làm bất cứ điều gì.Ghi đè WooCommerce Frontend Javascript

Cách sạch nhất để làm điều này để tôi có thể tải tệp nằm trong thư mục chủ đề của mình là gì?

Cảm ơn

+0

Bạn có muốn hoàn toàn vô hiệu hóa kịch bản của họ, hoặc ghi đè một hành vi hoặc sự kiện cụ thể? –

+0

Vâng, tôi sẽ hoàn toàn ghi đè lên tệp javascript (add-to-cart-variation.js) vì có khá nhiều thay đổi mà tôi cần phải thực hiện. – Sebastien

+1

Trong tập tin đó, có vẻ như chỉ có hai sự kiện được ràng buộc trên doc đã sẵn sàng. Bạn chỉ có thể unbind chúng trong kịch bản của riêng bạn. line-4 và line-216 https://github.com/woothemes/woocommerce/blob/master/assets/js/frontend/add-to-cart-variation.js. Tôi chưa từng làm việc với plugin đó, nhưng tôi cho rằng bạn cũng có thể chỉnh sửa thủ công tệp đó. –

Trả lời

27

tôi đã cùng một vấn đề ngoại trừ với add-to-cart.js. Giải pháp đơn giản là DEQUEUE tập lệnh woocommerce và ENQUEUE thay thế của bạn. Trong trường hợp của tôi, tôi đã thêm thông tin sau vào hàm functions.php của mình:

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); 

Bạn muốn DEQUEUE tập lệnh 'wc-add-to-cart-variation'. Tôi không nghĩ rằng bạn để ENQUEUE có cùng tên nhưng tôi không thể thấy lý do.

Hy vọng điều này sẽ hữu ích.

Nếu bạn đang sử dụng Phiên bản WordPress 4.0.1 và WooCommerce Phiên bản 2.2.10. Bạn có thể sử dụng các kịch bản sau đây:

 

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

nó '' tốt hơn '' để enqueue với cùng một tên, vì vậy bạn sẽ không phá vỡ bất kỳ sự phụ thuộc nó có thể có. – Leonel

+2

Nếu bạn cố gắng để enqueue với cùng một xử lý sau đó tập tin ban đầu vẫn được enqueued trừ khi bạn deregister xử lý ban đầu với 'wp_dequeue_script()' trước khi bạn lại enqueue nó. – cfx

+0

Bạn có thể vui lòng kiểm tra câu hỏi của tôi cũng http://wordpress.stackexchange.com/questions/215238/how-to-add-quick-edit-in-woocommerce-order-section –

1

Thêm phần này để function.php của bạn

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 script tải frontend và phong cách trong class-wc-frontend-scripts.php tập tin, và có thể được tìm thấy như thế nào kịch bản đã được đăng ký, enqueued, bản địa hóa và phụ thuộc.

Vị trí ưa thích để chèn mã lệnh trong Wordpress là móc tác vụ wp_enqueue_scripts, vì đó là thời điểm sau khi Wordpress được nạp đầy đủ nhưng trước khi bất kỳ đầu ra nào được tạo. Và tôi cũng muốn enqueue tất cả các kịch bản liên quan và phong cách của tôi trong một phần của mã.

Khi bạn muốn xóa hoàn toàn một số tập lệnh, hãy gọi wp_deregister_script() hoặc wp_dequeue_script() là đủ. Nhưng đôi khi nếu muốn thực hiện một số thay đổi và để lại các phụ thuộc hiện có, các biến và bản địa hóa có vấn đề bởi vì các plugin được tải trước các chủ đề. Vì vậy, hàm enqueue sẽ không hoạt động như bạn mong đợi. Đơn giản wp_dequeue_script() => wp_enqueue_script() sẽ not work, wp_deregister_script() => wp_register_script() sẽ hoạt động nhưng dữ liệu được bản địa hóa sẽ bị mất.


Điều này có thể được giải quyết bằng cách làm việc trực tiếp với $wp_scripts đối tượng toàn cầu có chứa và quản lý tất cả các kịch bản nạp qua wp_enqueue_script() hoặc đăng ký với 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

Tác phẩm cuối cùng phù hợp với tôi, cảm ơn –

+0

Tôi thích tùy chọn '$ wp_scripts' vì cách đó tôi không làm phiền/cần phải bận tâm về phụ thuộc tập lệnh hoặc phiên bản, v.v. +1 –

+0

Đây thực sự là một câu trả lời tuyệt vời! Tôi không có ý tưởng bạn có thể làm việc với hoặc thậm chí là một đối tượng '$ wp_scripts' mà bạn có thể sửa đổi. Thật đáng kinh ngạc! Tôi muốn mua cho bạn một ly bia! – Radmation