2016-11-14 3 views
3

Я хотел бы обойти страницу корзины и перенаправить пользователя на страницу оформления для нескольких продуктов.Пропустить страницу корзины для нескольких продуктов, перенаправляющих на заказ

Я создал добавить в корзину ссылку на продукт <a href="http://example.net/?add-to-cart=1461">Product Name</a>

И у меня есть код ниже

add_filter('woocommerce_add_to_cart_redirect', 'woo_redirect_checkout'); 

function woo_redirect_checkout() { 
    global $woocommerce; 
    $desire_product = 1461; 
    //Get product ID 
    $product_id = (int) apply_filters('woocommerce_add_to_cart_product_id', $_POST['add-to-cart']); 

    //Check if current product is subscription 
    if ($product_id == $desire_product){ 
     $checkout_url = $woocommerce->cart->get_checkout_url(); 
     return $checkout_url; 
     exit; 
    } else { 
     $cart_url = $woocommerce->cart->get_cart_url(); 
     return $cart_url; 
     exit; 
    } 
} 

из How to skip cart page on woocomerce for certain products only?. Но вместо этого URL перенаправляет меня на главную страницу. Просто интересно, где находится проблема,

Я также снял флажок добавить поведение в корзину в настройках woocommerce.

Заранее спасибо.

ответ

1

Я выбрал другой подход и крючок WordPress вместо woocommerce. Это основано на этот ответ: WooCommerce - Skip cart page redirecting to checkout page

Это тот код:

function skip_cart_page_redirection_to_checkout() { 

    // desired product id redirection 
    $product_id = 1461; 
    $items_ids = array(); 

    // Get all items IDs that are in cart 
    foreach(WC()->cart->get_cart() as $item) { 
     $items_ids[] = $item['product_id']; 
    } 

    // If is cart page and the desired peoduct is in cart => redirect to checkout. 
    if(is_cart() && in_array($product_id, $items_ids)) 
     // WooCommerce 3.0 compatibility added 
     if (version_compare(WC_VERSION, '2.7', '<')) { 
      wp_redirect(WC()->cart->get_checkout_url()); // Older than 3.0 
     } else { 
      wp_redirect(wc_get_checkout_url()); // 3.0+ (Thanks to helgatheviking) 
     } 

} 
add_action('template_redirect', 'skip_cart_page_redirection_to_checkout'); 

Этот код идет в function.php файле Вашего активного ребенка темы (или темы), или же в любом файле плагина.

Код проверен и полностью работоспособен.

+0

Исходный комментарий говорит, что 'get_checkout_url()' устарел, но он не * на самом деле * устарел. В любом случае, [источник] (https://github.com/woocommerce/woocommerce/blob/master/includes/class-wc-cart.php#L636-L645) советует использовать 'wc_get_checkout_url()'. – helgatheviking

+0

@helgatheviking О, спасибо, обновлено для всех версий ... Я знаю, многие мои ответы теперь несовместимы с woocommerce 3.0+ ... Я постараюсь обновить их постепенно ... – LoicTheAztec

+1

Источник говорит, что 'wc_get_checkout_url()' был доступен с версии 2.5. : shrugs: :) Это не отрицает то, что вы сказали об ответах, которые сейчас устарели. Я бы об этом не беспокоился. Они были правы, когда вы отправляли сообщения. – helgatheviking