WooCommerce 添加到购物车自定义重定向特定产品 ID

时间:2021-03-12 08:26:08

标签: php woocommerce product cart hook-woocommerce

我正在尝试加入“添加到购物车”重定向,更改特定产品 ID 的 URL 作为起点,我找到了以下代码(来源:https://jeroensormani.com/redirect-users-after-add-to-cart/

   function my_custom_add_to_cart_redirect( $url ) {
    
    if ( ! isset( $_REQUEST['add-to-cart'] ) || ! is_numeric( $_REQUEST['add-to-cart'] ) ) {
        return $url;
    }
    
    $product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $_REQUEST['add-to-cart'] ) );
    
    // Only redirect the product IDs in the array to the checkout
    if ( in_array( $product_id, array( 1, 16, 24) ) ) {
            $url = "https://mywebsite.com/";
        }
        
        return $url;
    
    }
    add_filter( 'woocommerce_add_to_cart_redirect', 'my_custom_add_to_cart_redirect' );

这似乎得到了其他人的认可。对我来说,当一个条件应用于它时,它似乎忽略了重定向注入。当条件被遗漏时它起作用:

function my_custom_add_to_cart_redirect( $url ) {
    $url = "https://mywebsite.com/";
    return $url;
}
add_filter( 'woocommerce_add_to_cart_redirect', 'my_custom_add_to_cart_redirect' );

我的结论/猜测是,条件或过滤器中的某些内容已过时,但我无法弄清楚出了什么问题。我已经研究了其他基于 woocommerce_add_to_cart_redirect 钩子的模拟器代码,并尝试了无数片段和函数组合,但无论何时应用条件,我都无法使它们中的任何一个工作。

[编辑] 现在想想,这很可能是一个查询问题。但不太确定如何去做。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

首先 woocommerce_add_to_cart_redirect 过滤器钩子有 2 个可用参数。所以是的,你找到的代码有点过时了。

对于所有人来说,如果您在 WooCommerce 设置 > 产品 (标签)“成功添加后重定向到购物车页面” 选项启用了此钩子,则此钩子有效/em>.

现在,WooCommerce 有两种添加到购物车的方式:

  • Ajax 添加到购物车,
  • 普通加入购物车。

钩子 woocommerce_add_to_cart_redirect 仅适用于 Normal 添加到购物车以定位特定产品,因为您无法使用 Ajax 添加到购物车来处理产品 ID重定向(见下文)

对于 Ajax 添加到购物车 the hook is defined in here 喜欢:

'cart_url' => apply_filters( 'woocommerce_add_to_cart_redirect', wc_get_cart_url(), null ),

其中第二个参数设置为 null


对于普通添加到购物车 the hook is defined in here 喜欢:

$url = apply_filters( 'woocommerce_add_to_cart_redirect', $url, $adding_to_cart );

其中 $adding_to_cart (第二个参数) 是产品对象 defined in here,例如:

$adding_to_cart = wc_get_product( $product_id );

以下是用于正常添加到购物车处理特定产品 ID 自定义重定向的正确工作代码示例:

add_filter( 'woocommerce_add_to_cart_redirect', 'custom_add_to_cart_redirect', 10, 2 );
function custom_add_to_cart_redirect( $redirect_url, $product ) {
    $product_ids = array( 37, 22, 53, 40 ); // Here set your product Ids in the array

    // Only redirect the product IDs in the array to the checkout
    if ( is_object($product) && in_array( $product->get_id(), $product_ids ) ) {
        $redirect_url = wc_get_checkout_url();
    }

    return $redirect_url;
}

代码位于活动子主题(或活动主题)的functions.php 文件中。已测试并适用于正常添加到购物车。

<块引用>

要处理Ajax添加到购物车重定向到自定义Url特定产品,需要一些jQuery代码......

答案 1 :(得分:0)

好的,已经尝试了很多来解决这个错误。 添加 LoicTheAztec 建议的工作片段后, 加载“购物车”页面时,无论是否为空,我都会收到此错误。

<块引用>

致命错误:未捕获的 ArgumentCountError:参数太少 函数 pza_custom_add_to_cart_redirect(), 1 传入 /home/DOMAIN/public_html/wp-includes/class-wp-hook.php 第 287 行 并且正好有 3 个预期在 /home/DOMAIN/public_html/wp-content/themes/generatepress_child/functions.php: 149 堆栈跟踪:#0 /home/DOMAIN/public_html/wp-includes/class-wp-hook.php(287): pza_custom_add_to_cart_redirect('https://DOMAIN...') #1 /home/DOMAIN/public_html/wp-includes/plugin.php(212): WP_Hook->apply_filters('https://DOMAIN...', Array) #2 /home/DOMAIN/public_html/wp-content/plugins/uni-woo-custom-product-options-premium/includes/class-uni-cpo-frontend-scripts.php(959): apply_filters('woocommerce_add...', 'https://DOMAIN...') #3 /home/DOMAIN/public_html/wp-includes/class-wp-hook.php(287): Uni_Cpo_Frontend_Scripts::load_scripts('') #4 /home/DOMAIN/public_html/wp-includes/class-wp-hook.php(311): WP_Hook->apply_filters(NULL, Array) #5 /home/DOMAIN/public_ in /home/DOMAIN/public_html/wp-content/themes/generatepress_child/functions.php 在线 149

好像和UNI-CPO Plugin有冲突。禁用插件后,问题就消失了。我很难弄清楚这是代码片段还是插件的问题,以及如何解决(如果可能)。