Хук для кнопки 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
Anriëtte Myburgh
Это означает, что скрипты WooCommerce не подключаются. Посмотрите /woocommerce.phpи вы увидите, какwoocommerce_frontend_scripts()привязан к хукуtemplate_redirect`. Вам нужно либо подключить это в своем коде, либо вручную загрузить необходимые фронтенд-скрипты.
EAMann
Я вижу, что загружается стандартный woocommerce.min.js и связанные файлы, но кнопка не перехватывается обработчиком live('click'). Есть какие-то советы?
Anriëtte Myburgh
Без возможности посмотреть ваш сайт, я могу дать лишь ограниченные рекомендации. Обработчик клика обернут в дополнительную проверку: if (woocommerce_params.option_ajax_add_to_cart=='yes') { проходит ли код через это условие?
EAMann
Привет, проверил это, и я продвинулся дальше. Теперь кажется, что $.post() вообще не получает ответа. Похоже, admin-ajax.php ничего не возвращает.
Anriëtte Myburgh
Это означает, что 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.
EAMann