Формирование ссылки в woocommerce

Появилась задача на поддомене к лендинг привязать кнопку, которая будет редиректить на другой сайт на WordPress, где в корзину автоматически должен добавляться продукт и активироваться купон.

Шорткоды тут не будут работать, поэтому нам нужна готовая ссылка.

Чтобы покупатель после нажатия кнопки сразу попадал в корзину, надо его перекинуть сразу на корзину, точнее на /cart, а внутри неё уже добавлять товар и активировать купон.

В итоге получилась следующая ссылка: /cart/?add-to-cart=66&variation_id=67&quantity=1&attribute_pa_value=20&attribute_pa_time=1&code=promo20

Всё указания добавляются чётко по ID:

  • add-to-cart — id вашего товара
  • variation_id — id вариации
  • quantity — сколько добавить данной позиции в корзину
  • attribute_pa_  — стандартное начало для атрибута товара
    • _value — название атрибута, 20 — значение
    • _time — название атрибуты, 1 — значение
  • code — промокод для активации.

Чтобы активация промокода работала, надо добавить в function.php следующий код:

// Set coupon code as custom data in cart session
add_action('wp_loaded', 'add_coupon_code_to_cart_session');
function add_coupon_code_to_cart_session() {
// Exit if no code in URL or if the coupon code is already set cart session
if( empty( $_GET["code"] ) || WC()->session->get( 'custom_discount' ) ) return;

if( ! WC()->session->get( 'custom_discount' ) ) {
$coupon_code = esc_attr($_GET["code"]);
WC()->session->set( 'custom_discount', $coupon_code );
// If there is an existing non empty cart active session we apply the coupon
if( ! WC()->cart->is_empty() ){
WC()->cart->add_discount( $coupon_code );
}
}
}

// Add coupon code when a product is added to cart once
add_action('woocommerce_add_to_cart', 'add_coupon_code_to_cart', 10, 6 );
function add_coupon_code_to_cart( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
$coupon_code = WC()->session->get( 'custom_discount' );
$applied_coupons = WC()->session->get('applied_coupons');

if( empty($coupon_code) || in_array( $coupon_code, $applied_coupons ) ) return;

WC()->cart->add_discount( $coupon_code );
}

// Remove coupon code when user empty his cart
add_action('woocommerce_cart_item_removed', 'check_coupon_code_cart_items_removed', 10, 6 );
function check_coupon_code_cart_items_removed( $cart_item_key, $cart ){
$coupon_code = WC()->session->get( 'custom_discount' );

if( $cart->has_discount( $coupon_code ) && $cart->is_empty() );
$cart->remove_coupon( $coupon_code );
}

Помощь выше мне помогла для вариативного товара, если вам нужно нечто другое, то о формировании ссылки в woocommerce здесь можно узнать куда больше: https://businessbloomer.com/woocommerce-custom-add-cart-urls-ultimate-guide/

Site Footer