2015-10-06 79 views
2

我将此添加到我的functions.php文件:如何跳过特定产品的woocomerce的购物车页面?

add_filter ('woocommerce_add_to_cart_redirect', 'woo_redirect_to_checkout'); 
function woo_redirect_to_checkout() { 
$checkout_url = WC()->cart->get_checkout_url(); 
return $checkout_url; 
} 

但现在,所有的产品都重新定向海峡退房。我想只在一个产品中有这个选项。这是我可以将产品ID添加到同一个文件管理器的一种方式吗?

谢谢!

回答

1

您只需将产品添加到购物车中即可获得该产品,然后检查是否要将该产品重定向到购物车页面。您需要更改$desire_product = 'certain_product';下面的代码行,它肯定会工作。

add_filter('woocommerce_add_to_cart_redirect', 'woo_redirect_checkout'); 

function woo_redirect_checkout() { 
    global $woocommerce; 
    $desire_product = 'certain_product'; 
    //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; 
    } 
} 
+0

谢谢@PrafullaKumarSahu – Marcio

+0

帮助人们总是愉快:) –

1

有一些行动挂钩,以及可以使用,对于如:woocommerce_add_to_cart其通过产品ID的回调函数:

add_action('woocommerce_add_to_cart', 'custom_add_to_cart', 10, 2); 

function custom_add_to_cart($cart_item_key, $product_id) { 
    // replace 123 with a valid product id 
    if(123 == $product_id) { 
     wp_redirect(WC()->cart->get_checkout_url()); 
     exit; 
    } 
} 
1

我写了这个小插件,共享在这里。该插件为产品元框添加了一个小型复选框,因此您可以指定哪些产品应触发自动跳过结帐。基本上使用与其他答案中相同的woocommerce_add_to_cart_redirect过滤器,但提供admin后端选项以确定哪些产品会触发重定向。

<?php 
/** 
* Plugin Name: Redirect to checkout 
* Plugin URI: http://stackoverflow.com/q/32962653/383847 
* Description: redirect to checkout for certain products 
* Version: 1.0 
* Author: Kathy Darling 
* Author URI: http://kathyisawesome.com 
* Requires at least: 3.8 
* Tested up to: 3.9 
* 
* Text Domain: kia-redirect-to-checkout 
* Domain Path: /languages/ 
* 
*/ 
if (! defined('ABSPATH')) { 
    exit; // Exit if accessed directly 
} 

/* 
* Add text inputs to product metabox 
*/ 
function kia_add_to_wc_metabox(){ 
    global $post; 

    echo '<div class="options_group">'; 

    // Suggested Price 
    echo woocommerce_wp_checkbox(array(
     'id' => '_redirect_to_checkout', 
     'label' => __('Redirect to checkout', 'kia-redirect-to-checkout') , 
     'description' => __('When this item is added to the cart, re-direct the customer to checkout immediately.', 'kia-redirect-to-checkout') 
     ) 
    ); 

    echo '</div>'; 

} 
add_action('woocommerce_product_options_general_product_data', 'kia_add_to_wc_metabox'); 


/* 
* Save extra meta info 
*/ 
function kia_process_wc_meta_box($post_id, $post) { 

    if (isset($_POST['_redirect_to_checkout'])) { 
     update_post_meta($post_id, '_redirect_to_checkout', 'yes'); 
    } else { 
     update_post_meta($post_id, '_redirect_to_checkout', 'no'); 
    } 

} 
add_action('woocommerce_process_product_meta', 'kia_process_wc_meta_box', 1, 2); 


/* 
* Redirect to checkout 
*/ 
function kia_add_to_cart_redirect($url){ 

    // If product is one of our special types 
    if (is_numeric($_REQUEST['add-to-cart']) && kia_maybe_redirect_cart((int) $_REQUEST['add-to-cart'])) { 

     // Remove default cart message 
     WC()->clear_messages(); 

     // Redirect to checkout 
     $url = WC()->cart->get_checkout_url(); 
    } 

    return $url; 
} 
add_filter('woocommerce_add_to_cart_redirect', 'kia_add_to_cart_redirect'); 


/* 
* check if an item has custom field 
*/ 
function kia_maybe_redirect_cart($product_id){ 

    if ('yes' == get_post_meta($product_id, '_redirect_to_checkout', true)){ 
     return TRUE; 
    } else { 
     return false; 
    } 
} 
+0

+1这应该是接受的解决方案。使用我提供的代码会更加灵活,如果您需要添加更多需要在添加到购物车时重定向到结帐的产品,则需要更改这些代码。使用插件,只需编辑产品并勾选复选框即可。 –

相关问题