Хук для кнопки AJAX-добавления в корзину?
Разбирая код, его довольно легко найти.
Во-первых, посмотрите на шаблон, используемый для архивов товаров — /templates/archive-product.php
. Среди прочего, он настраивает стандартные запросы и начинает формировать разметку страницы.
Но когда начинается перебор каждого товара, работа делегируется шаблону /templates/loop-shop.php
. Этот шаблон загружается для каждого товара и создает листинг, используя следующий код:
<?php do_action('woocommerce_before_shop_loop_item'); ?>
<a href="<?php the_permalink(); ?>">
<?php do_action('woocommerce_before_shop_loop_item_title', $post, $_product); ?>
<h3><?php the_title(); ?></h3>
<?php do_action('woocommerce_after_shop_loop_item_title', $post, $_product); ?>
</a>
<?php do_action('woocommerce_after_shop_loop_item', $post, $_product); ?>
Нас интересует последнее действие: woocommerce_after_shop_loop_item
. Оно подключено в файле /woocommerce_template_actions.php
к функции woocommerce_template_loop_add_to_cart()
.
Копнув еще глубже, оказывается, что именно эта функция вам и нужна.
Как ее добавить
Самый простой способ использовать эту функцию — вызвать ее напрямую. Просто учтите, что ей требуются два параметра: $post
и $_product
. Следующий код вызовет ее правильно:
global $post; // Предполагаем, что он уже установлен
$_product = &new woocommerce_product( $post->ID );
woocommerce_template_loop_add_to_cart( $post, $_product );
Сама функция вызывает свои собственные echo
, поэтому просто вызовите ее напрямую.

Это выводит именно то, что мне нужно, но похоже, что кнопка должна быть связана с каким-то JS, потому что сейчас при клике она загружает товар, не добавляя его в корзину, хотя ссылка выглядит так: {url}/?add-to-cart=9686

Это означает, что скрипты WooCommerce не подключаются. Посмотрите /woocommerce.phpи вы увидите, как
woocommerce_frontend_scripts()привязан к хуку
template_redirect`. Вам нужно либо подключить это в своем коде, либо вручную загрузить необходимые фронтенд-скрипты.

Я вижу, что загружается стандартный woocommerce.min.js и связанные файлы, но кнопка не перехватывается обработчиком live('click')
. Есть какие-то советы?

Без возможности посмотреть ваш сайт, я могу дать лишь ограниченные рекомендации. Обработчик клика обернут в дополнительную проверку: if (woocommerce_params.option_ajax_add_to_cart=='yes') {
проходит ли код через это условие?

Привет, проверил это, и я продвинулся дальше. Теперь кажется, что $.post() вообще не получает ответа. Похоже, admin-ajax.php ничего не возвращает.

Это означает, что AJAX-хуки не добавляются. add_action('wp_ajax_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart');
и add_action('wp_ajax_nopriv_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart');
. К сожалению, без непосредственного доступа к вашему сайту мы мало чем можем помочь. Вам нужно нанять разработчика для проверки или, возможно, напрямую связаться с командой WooCommerce.
