Vagrant0610
@Vagrant0610
PHP разработчик

Как в WooCommerce добавить кнопку «Купить в 1 клик» рядом с кнопкой «Добавить в корзину»?

Здравствуйте! Необходимо в категории с товарами, возле каждого товара вывести 2 кнопки: "Купить в 1 клик" и "Добавить в корзину". Естественно функционал должен быть соответствующий. При добавлении в корзину товар должен просто добавляться в корзину. С этим проблем нет, кнопка "Добавить в корзину" есть возле каждой карточки товара. При нажатии на "Купить в 1 клик", необходимо добавлять товар в корзину и сразу же отправлять человека на страницу checkout (Оформление заказа). Это необходимо реализовать, так же, на станице товара. Вроде бы ничего сложного, но есть одно НО, о нём в последнем абзаце, если кратко. Подробнее, в предпоследнем.

Пробовал решить данную задачу разными способами. Первый способ был поиск плагина. Их было найдено несколько. Если кому-то понадобится, это: Buy one click WooCommerce и WooCommerce Direct Checkout. Платные варианты я не рассматривал, а они есть, один из них есть на сайте saphali, но функционал очень похож на Buy one click WooCommerce. Второй способ был написать простой javascript, который будет автоматически нажимать на ссылку добавить в корзину, а после, переадресовывать на страницу "Оформление заказа". Но такой скрипт который работал бы как задумано, написать не получилось. Далее о самих сложностях, которые у меня возникли.

Почему не подошли плагины?
1. Buy one click WooCommerce - отличный плагин который не добавляет товар в корзину, а просто показывает форму с полями для заполнения. Которая в последующем, после заполнения, сохраняется в сам плагин. А не в заказы WooCommerce. Необходимо что бы все заказы были в одном месте. Это удобно, правильно и понятно. Так же в этом плагине я не смог настроить то что мне нужно. Он добавляет рядом кнопку, но как я уже сказал выше, товар в корзину она не кладёт, хотя и умеет перенаправлять на страницу "Оформления заказа". Возможно плагин более конверсионное решение и скорее всего я его протестирую. Но сейчас, стоит другая задача. С этим плагином к сожалению у меня не сложилось, хоть он и имеет большое количество настроек.
2. WooCommerce Direct Checkout - отличный плагин который заменяет функционал кнопки "Добавить в корзину". Он в точности реализует функционал кнопки "Купить в 1 клик", который мне и необходим. Но функционал кнопки "Добавить в корзину" полностью пропадает и заменяется на "Купить в 1 клик". Я попытался создать свою кнопку "Добавить в корзину". Но к сожалению не понял как это можно сделать, так как всегда при нажатии на неё выполнялся функционал "Купить в 1 клик".
Почему не получилось с помощью JavaScript?
Я это пытался сделать такой функционал путём нажатия через JavaScript на ссылку "Добавить в корзину" и автоматической переадресацией на страницу "Оформление заказа". Но так и не смог это сделать, так как скрипт переадресовывал меня сразу на страницу оформления заказа но не нажимал на ссылку "Добавить в корзину". В ссылке я указывал атрибут onClick и туда вставлял скрипт. Выглядело у меня это так:
Вариант 1.
<a href="/checkout/" onClick="window.location = '<?php bloginfo('url'); echo esc_url($product->add_to_cart_url()); ?>';" data-quantity="<?php echo esc_attr(isset($args['quantity']) ? $args['quantity'] : 1 ); ?>" class="<?php echo esc_attr(isset($args['class']) ? $args['class'] : 'button'); ?>" <?php echo isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '' ?>>Добавить в корзину</a>

Вариант 2.
<a href="<?php echo esc_url($product->add_to_cart_url()); ?>" onClick="window.location = '<?php bloginfo('url'); ?>/checkout/';" data-quantity="<?php echo esc_attr(isset($args['quantity']) ? $args['quantity'] : 1 ); ?>" class="<?php echo esc_attr(isset($args['class']) ? $args['class'] : 'button'); ?>" <?php echo isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '' ?>>Добавить в корзину</a>

Кнопку я добавлял в файл по пути: "\wp-content\plugins\woocommerce\templates\loop\add-to-cart.php" (если кому-то поможет, это файл шаблона WooCommerce, в котором редактируется код кнопки "Добавить в корзину"). Так же был вариант с функцией, но с ним тоже ничего не вышло.

Кратко: плагины не подходят по причине того что они один из них при нажатии на кнопку "Купить в 1 клик" вызывает форму и не добавляет товар в корзину, а другой удаляет кнопку "Добавить в корзину" и оставляет возможность только "Купить в 1 клик". Пытался реализовать путем нажатия на ссылку "Добавить в корзину" по средствам JS и переадресации на страницу "Оформление заказа", после переадресации оказывается что товар в корзину не добавляется. Соответственно JS не работает как надо, хотя код рабочий. Пробовал разные варианты реализации на JS этой возможности. Как ещё можно попробовать это реализовать? Возможно через хуки, но я в этом ничего не понимаю, знаю только куда их вставлять, а как найти подходящий хук, без понятия, вряд ли это делается перебором.
  • Вопрос задан
  • 12331 просмотр
Решения вопроса 1
1. Добавьте кнопку и в атрибуте (можно data-id) передайте id товара
global $product;
$id = $product->id;


2. Повесьте обработчик на клик кнопки
jQuery('.one-click-button').click(function(e) {
 	e.preventDefault();
 	jQuery(this).addClass('adding-cart');
 	var product_id = jQuery(this).data('id');

 	var ajax_url = "/wp-admin/admin-ajax.php"

 	jQuery.ajax ({
 		url: ajax_url,  
 		type:'POST',
 		data:'action=oneclick&product_id=' + product_id + '&quantity=1',

 		success:function(results) {
		// Показываем окно успешного добавления
		$('.form_popup').hide();
		$('#modal').css('display','inline-block');
		$('.good_cart').css('display','inline-block');
		document.location.href = 'http://domain.ru/oformlenie-zakaza/'; //Переход на оформление заказа
	}
});
 });


3. Обработчик в functions.php
function oneclick() {
			$product_id = $_POST['product_id'];
			$variation_id = $_POST['variation_id'];
			$quantity = $_POST['quantity'];

			if ($variation_id) {
				WC()->cart->add_to_cart( $product_id, $quantity, $variation_id );
			} else {
				WC()->cart->add_to_cart( $product_id, $quantity);
			}

			$items = WC()->cart->get_cart();
			global $woocommerce;
			$item_count = $woocommerce->cart->cart_contents_count; ?>

			<?php die();
		}

add_action('wp_ajax_oneclick', 'oneclick');
add_action('wp_ajax_nopriv_oneclick', 'oneclick');
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@abubekov
Может всё таки лучше взять плагин https://ru.wordpress.org/plugins/buy-one-click-woo...
Лучший в своём роде
Ответ написан
Комментировать
PolarOneBear
@PolarOneBear
С плагином Buy one click WooCommerce пришлось повозится, но заработал.
Повозиться пришлось из-за темы. Замена хука в плагине решило проблему.

Чем хорош этот плагин, так тем, что добавляет заказ клиента в список заказов в админке, а это весьма "гут"! И тебе уведомления и, если есть синхронизация, отправка этих заказов в 1С и всякие crm.

Есть на данный момент трабл с шорткодом и докупить функцию вариативных товаров нужно чтобы отправляло в заказ цвет \ размер.
Ответ написан
Комментировать
@Mark116
как тогда сделать так чтоб кнопка была внужной категории ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы