2012-08-07 110 views
21

有人可以指導我什麼是重寫WooCommerce核心JavaScript文件,特別是前端文件的正確方法。我還沒有找到任何關於此的文檔並查看代碼,前端腳本文件的路徑在插件中是硬編碼的,所以我懷疑在我的主題中放置資源文件夾會執行任何操作。覆蓋WooCommerce前端Javascript

什麼是最乾淨的方式,以便我可以加載位於我的主題目錄中的文件?

謝謝

+0

你想完全禁用它們的腳本,或覆蓋:


這可以通過直接與包含和管理通過wp_enqueue_script()加載的所有腳本或登記wp_register_script()$wp_scripts全局對象工作來解決一個特定的行爲或事件? – 2012-08-07 20:15:12

+0

嗯,我打算徹底改寫javascript文件(add-to-cart-variation.js),因爲我需要做很多更改。 – Sebastien 2012-08-07 20:36:48

+1

在該文件中,它看起來好像只有兩個事件被綁定到文檔就緒。你可以在你自己的腳本中解除它們。第4行和第216行https://github.com/woothemes/woocommerce/blob/master/assets/js/frontend/add-to-cart-variation.js。我沒有使用該插件,但我認爲你也可以手動修改該文件。 – 2012-08-07 20:53:21

回答

27

我有同樣的問題,除了add-to-cart.js。簡單的解決方案是DEQUUE的woocommerce腳本和ENQUEUE你的替代品。在我來說,我增加了以下我的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); 

你會想離隊的「WC-添加到購物車-變化」腳本。我不認爲你 ENQUEUE具有相同的名稱,但我看不出一個理由不。

希望這會有所幫助。

如果您使用WordPress版本4.0.1和WooCommerce版本2.2.10。您可以使用以下腳本:

 

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

用相同的名字排隊會更好,所以你不會破壞它的任何依賴可能有。 – Leonel 2012-12-13 13:20:43

+2

如果嘗試使用相同的句柄排隊,那麼原始文件仍然會被排入隊列,除非在重新入隊之前使用'wp_dequeue_script()'註銷原始句柄。 – cfx 2014-09-01 18:16:12

+0

你可否請檢查我的問題也http://workpress.stackexchange.com/questions/215238/how-to-add-quick-edit-in-woocommerce-order-section – 2016-01-23 13:40:21

1

添加本節進行到您的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負載前端腳本和樣式在class-wc-frontend-scripts.php文件,並有可以發現腳本是如何註冊,排隊,本地化和依賴關係。

在Wordpress中排隊腳本的首選位置是wp_enqueue_scripts動作鉤子,因爲那是在Wordpress完全加載之後但在執行任何輸出之前的時刻。而且我喜歡將所有相關的腳本和樣式排入代碼的一個部分。

當您想要完全刪除一些腳本時,調用wp_deregister_script()wp_dequeue_script()就足夠了。但有時候,如果想進行一些更改並保留現有的依賴關係,變量和本地化,則會出現問題,因爲插件會在主題之前加載。所以入隊函數不會像你期望的那樣工作。簡單wp_dequeue_script() => wp_enqueue_script()not work,wp_deregister_script() => 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

最後一個適合我,捆綁謝謝 – 2017-09-17 07:45:58

+0

我喜歡'$ wp_scripts'選項,因爲這樣我不會打擾/需要打擾腳本依賴或版本等。+1 – 2017-10-04 05:49:32

+0

這真是一個非常了不起的答案!我不知道你可以使用或者甚至有一個你可以修改的'$ wp_scripts'對象。這真太了不起了!我想給你買一瓶啤酒! – Radmation 2018-03-09 22:11:06