Как автоматически добавить товар в корзину в магазине на WooCommerce при переходе в него по ссылке

Иногда у владельцев интернет-магазинов возникает желание сократить путь оформления заказа и сделать так, чтобы при переходе в магазин на 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.

Метки: ,
Понравилась статья? Поделитесь ссылкой в соцсетях: