如何仅针对某些产品跳过woocomerce上的购物车页面?

时间:2023-01-19 01:11:53

I added this to my functions.php file :

我把它添加到我的functions.php文件中:

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;
}

But now, all the products are re-directing strait to check-out. I would like to have this option only in one product. Is that a way I can add a product ID to that same filer?

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

Thank you!

谢谢!

3 个解决方案

#1


1  

You need to get the product when It is just added to cart , then check if for this product you want to redirect the cart page to checkout page . You need to change $desire_product = 'certain_product'; line on below code and It will definitely work.

只有在将产品添加到购物车时才需要获取产品,然后检查是否要将此产品重定向到购物车页面以结帐页面。你需要改变$ 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;
    }
}

#2


1  

There are a few action hooks as well that you can use, for eg: woocommerce_add_to_cart which passes the product id to the callback function:

您可以使用一些动作挂钩,例如: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;   
    }
}

#3


1  

I wrote a little plugin for this, sharing it here. The plugin adds a small checkbox to the product metabox, so you can specify which products should trigger the automatic skip to checkout. Basically using the same woocommerce_add_to_cart_redirect filter as in the other answers, but providing the admin backend option to determine which products trigger the redirection.

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

<?php
/**
 * Plugin Name: Redirect to checkout
 * Plugin URI: http://*.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;
    }
}

#1


1  

You need to get the product when It is just added to cart , then check if for this product you want to redirect the cart page to checkout page . You need to change $desire_product = 'certain_product'; line on below code and It will definitely work.

只有在将产品添加到购物车时才需要获取产品,然后检查是否要将此产品重定向到购物车页面以结帐页面。你需要改变$ 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;
    }
}

#2


1  

There are a few action hooks as well that you can use, for eg: woocommerce_add_to_cart which passes the product id to the callback function:

您可以使用一些动作挂钩,例如: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;   
    }
}

#3


1  

I wrote a little plugin for this, sharing it here. The plugin adds a small checkbox to the product metabox, so you can specify which products should trigger the automatic skip to checkout. Basically using the same woocommerce_add_to_cart_redirect filter as in the other answers, but providing the admin backend option to determine which products trigger the redirection.

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

<?php
/**
 * Plugin Name: Redirect to checkout
 * Plugin URI: http://*.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;
    }
}