Переопределение Интерфейса WooCommerce Javascript


Может ли кто-нибудь подсказать мне, как правильно переопределять основные Javascript-файлы WooCommerce, в частности файлы frontend. Я не нашел никакой документации по этому вопросу и, глядя на код, путь к файлам скриптов frontend жестко закодирован в плагине, поэтому я сомневаюсь, что размещение папки assets в моей теме что-либо сделает.

Какой самый чистый способ сделать это, чтобы я мог загрузить файл, расположенный в моей теме dir?

Спасибо

3 23

3 ответа:

У меня была та же проблема, за исключением добавления в корзину.JS. Простое решение состоит в том, чтобы отключить скрипт woocommerce и поставить в очередь свою замену. В моем случае я добавил к своим функциям следующее.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-add-to-cart-variation". Я не думаю, что вы должны ставить в очередь с тем же именем, но я не вижу причин не делать этого.

Надеюсь, это поможет.

Если вы используете 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');

WooCommerce загружает интерфейсные скрипты и стили в файл class-wc-frontend-scripts.php, и там можно найти, как скрипты регистрируются, помещаются в очередь, локализуются и зависимости.

Предпочтительным местом для запроса скриптов в Wordpress является крюк действия wp_enqueue_scripts, потому что это момент после полной загрузки Wordpress, но до того, как будет сделан какой-либо вывод. А также мне нравится помещать все мои связанные скрипты и стили в один раздел кода.

Если вы хотите полностью удалить некоторые скрипты, вызовите достаточно либо wp_deregister_script(), либо wp_dequeue_script(). Но иногда, если вы хотите внести некоторые изменения и оставить существующие зависимости, переменные и локализацию, возникает проблема, потому что плагины загружаются раньше тем. Поэтому функции enqueue не будут работать так, как вы ожидаете. Простой wp_dequeue_script() => wp_enqueue_script() не будет работать., wp_deregister_script() => wp_register_script() будет работать, но локализованные данные будут потеряны.


Это можно решить, работая непосредственно с $wp_scripts глобальным объектом, который содержит и управляет всеми скриптами, загруженными через wp_enqueue_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';
    }

Добавьте этот раздел в свою функцию.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' );