Список JS событий во фронтенде WooCommerce
Где можно найти исчерпывающий список Javascript событий, определенных в WooCommerce (таких событий как woocommerce_variation_has_changed
)?

В поисках этой информации я немного углубился в исходные JS-файлы.
JavaScript события WooCommerce
События WooCommerce при оформлении заказа
$( document.body ).trigger( 'init_checkout' );
$( document.body ).trigger( 'payment_method_selected' );
$( document.body ).trigger( 'update_checkout' );
$( document.body ).trigger( 'updated_checkout' );
$( document.body ).trigger( 'checkout_error' );
$( document.body ).trigger( 'applied_coupon_in_checkout' );
$( document.body ).trigger( 'removed_coupon_in_checkout' );
События WooCommerce на странице корзины
$( document.body ).trigger( 'wc_cart_emptied' );
$( document.body ).trigger( 'update_checkout' );
$( document.body ).trigger( 'updated_wc_div' );
$( document.body ).trigger( 'updated_cart_totals' );
$( document.body ).trigger( 'country_to_state_changed' );
$( document.body ).trigger( 'updated_shipping_method' );
$( document.body ).trigger( 'applied_coupon', [ coupon_code ] );
$( document.body ).trigger( 'removed_coupon', [ coupon ] );
События WooCommerce на странице товара
$( '.wc-tabs-wrapper, .woocommerce-tabs, #rating' ).trigger( 'init' );
События WooCommerce для вариативных товаров
$( document.body ).trigger( 'found_variation', [variation] );
События WooCommerce при добавлении в корзину
$( document.body ).trigger( 'adding_to_cart', [ $thisbutton, data ] );
$( document.body ).trigger( 'added_to_cart', [ response.fragments, response.cart_hash, $thisbutton ] );
$( document.body ).trigger( 'removed_from_cart', [ response.fragments, response.cart_hash, $thisbutton ] );
$( document.body ).trigger( 'wc_cart_button_updated', [ $button ] );
$( document.body ).trigger( 'cart_page_refreshed' );
$( document.body ).trigger( 'cart_totals_refreshed' );
$( document.body ).trigger( 'wc_fragments_loaded' );
События WooCommerce при добавлении способа оплаты
$( document.body ).trigger( 'init_add_payment_method' );
Для подписки на эти события используйте:
jQuery('<event_target>').on('<event_name>', function(){
console.log('<event_name> triggered');
});
Например:
jQuery('body').on('init_checkout', function(){
console.log('init_checkout triggered');
// теперь.делаем.что.угодно();
});

Спасибо за ответ, именно это я и искал. Вернусь сюда, если найду другие события.

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

@Badger Что именно не работает? На какой странице вы работаете и проверяли ли вы, что скрипты WooCommerce загружаются?

В консоль ничего не записывается, когда я добавляю что-то в корзину на странице товара, используя следующий код: jQuery(function() {
// Товар добавлен в корзину
jQuery('body').on('added_to_cart', function(){
console.log('Товар добавлен в корзину');
});
});
Скрипты, кажется, загружаются. Я подключил свой скрипт с зависимостью от 'woocommerce'.

@Badger извините, я совсем забыл вам ответить. Для тех, кто может столкнуться с такой же проблемой: по умолчанию Woocommerce выполняет полную перезагрузку страницы при событии добавления в корзину, поэтому JS-событие никогда не срабатывает. Если вы включите добавление в корзину через AJAX в настройках WC, вы также получите JS-событие.

Может кто-нибудь добавить описание к каждому из триггеров? В частности, мне нужно событие, которое срабатывает после успешного оформления заказа - следует ли использовать "init_checkout" или что-то другое?

@SwimmingG в основном успешный (отправленный) заказ сопровождается перенаправлением на страницу "thank-you" или подобную. У вас есть какое-то кастомное поведение в этом случае? Возможно, вам нужен хук woocommerce_thankyou (php) или что-то подобное?

@ViktorBorítás спасибо, Виктор - в идеале я хотел бы использовать триггер, который работает только с javascript на фронтенде, а не с php. Если не получится сделать только с js, тогда перейду к тому, что вы упомянули. Огромное спасибо :)

Я хочу запускать проверку наличия товара после внешнего обновления выпадающих меню, если только я не ошибаюсь в подходе. Мне нужно передать значения куда-то, чтобы получить ID вариации.
Я думаю, что мне нужно вызвать обновление кнопки "Добавить в корзину", но у меня пока не получается.

Чтобы найти полный список всех событий (и быть в курсе любых новых добавленных) вы можете обратиться к .js файлам в директории:
/wp-content/plugins/woocommerce/assets/js/frontend
Ниже я привожу другие события (в дополнение к ответу @jgangso):
ВАРИАЦИИ
hide_variation
срабатывает при сбросе отображаемых данных вариацииshow_variation
срабатывает, когда найдена вариация, соответствующая всем атрибутамwoocommerce_variation_select_change
срабатывает при изменении поля атрибутаwoocommerce_variation_has_changed
срабатывает при изменении выбора вариацииcheck_variations
срабатывает:- при изменении поля атрибута
- при перезагрузке данных вариации из DOM
woocommerce_update_variation_values
срабатывает при обновлении вариацийwoocommerce_gallery_reset_slide_position
сбрасывает позицию слайда, если вариация имеет другое изображение, чем текущееwoocommerce_gallery_init_zoom
устанавливает изображения продукта для выбранной вариации
ФРАГМЕНТЫ КОРЗИНЫ
wc_fragments_refreshed
срабатывает при успешном обновлении фрагментов корзины через Ajaxwc_fragments_ajax_error
срабатывает при ошибке обновления фрагментов корзины через Ajaxwc_fragment_refresh
обновляет при показе страницы после кнопки "Назад" (Safari)wc_fragments_loaded
срабатывает после загрузки фрагментов корзины
ВЫБОР СТРАНЫ (ОФОРМЛЕНИЕ ЗАКАЗА)
country_to_state_changed
срабатывает при изменении страны в поле выбораcountry_to_state_changing
иwc_address_i18n_ready
обрабатывают локализацию
СТРАНИЦА ТОВАРА
wc-product-gallery-before-init
срабатывает перед инициализацией всех галерей на страницеwc-product-gallery-after-init
срабатывает после инициализации всех галерей на странице
СЛАЙДЕР ЦЕН
price_slider_updated
срабатывает после обновления слайдера ценprice_slider_create
срабатывает после создания слайдера ценprice_slider_slide
срабатывает после перемещения слайдера ценprice_slider_change
срабатывает после изменения слайдера цен
Связанные ответы:

Помимо полного списка событий, вы можете пойти интерактивным путем и вставить следующий код в консоль JavaScript, затем совершать действия в магазине, которые хотите отследить, и наблюдать в консоли за логгированием соответствующих событий.
jQuery(document.body).on(
"init_checkout payment_method_selected update_checkout updated_checkout checkout_error applied_coupon_in_checkout removed_coupon_in_checkout adding_to_cart added_to_cart removed_from_cart wc_cart_button_updated cart_page_refreshed cart_totals_refreshed wc_fragments_loaded init_add_payment_method wc_cart_emptied updated_wc_div updated_cart_totals country_to_state_changed updated_shipping_method applied_coupon removed_coupon",
function (e) {
console.log(e.type)
}
)
