
Иногда у владельцев интернет-магазинов возникает желание сократить путь оформления заказа и сделать так, чтобы при переходе в магазин на WooCommerce по, например, рекламной ссылке, покупателю не нужно было бы вручную добавлять товар в корзину.
Допустим, кликает потенциальный покупатель по ссылке и сразу попадает в корзину с добавленным в нее товаром. Остается лишь перейти к оформлению заказа и его оплате, если таковая подключена на сайте.
Подобный сценарий бывает особенно удобен при продаже как простых, так и вариативных товаров или услуг, когда предлагается конкретный вариант с определенной ценой, а добавление в корзину других позиций из каталога если и не запрещено, то не предполагается.
Реализовать подобный сценарий может помочь код, приведенный ниже. Мне показалось удобным сделать так, чтобы ссылка для перехода состояла бы из двух частей или параметров: первый – это любое определенное слово или фраза, например add2cart («добавить в корзину»), а второй – артикул продукта, который всегда уникален в магазине (он же SKU).
https://vash-sait/add2cart/[артикул]
Если товар вариативный, то для каждой вариации назначается свой артикул, который и используется в ссылке (очевидно, что использование в нем только латинских символов и/или цифр без пробелов – наилучший вариант).
В результате получился следующий код:
/* * Автоматическое добавление продукта в корзину * при переходе по ссылке вида /add2cart/[product_sku] */ add_filter('template_redirect', 'my_add2cart_goto_cart'); function my_add2cart_goto_cart($template) { /** * Активен ли плагин WooCommerce? **/ if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { global $wp; // Получаем адрес перехода на сайт $request = $wp->request; if (strlen($request) > 0 && substr_count($request, '/') > 0) { $url_parts = explode('/', $request); // Есть ли в адресе на первом месте «add2cart»? if ($url_parts[0] == 'add2cart' and sizeof($url_parts) == 2) { // Очищаем корзину WC()->cart->empty_cart(); $product_sku = sanitize_key($url_parts[1]); $product_id = wc_get_product_id_by_sku($product_sku); // Не найден продукт с таким SKU; if ($product_id == 0) return; // Добавляем продукт/товар в корзину WC()->cart->add_to_cart($product_id); // Собираем utm-метки, если есть do_action('woocommerce_collect_utm_codes'); // Открываем корзину с добавленным в нее товаром wp_redirect('/cart'); exit; } } } }
В приведенной функции используется вызов хука do_action('woocommerce_collect_utm_codes')
. Описание его реализации можно найти в предыдущей заметке, посвященной сбору UTM-меток в магазине на WooCommerce.