woocommerce_add_to_cart_validation 挂钩适用于可变产品,但不适用于单个产品

7uc*_*f3r 0 woocommerce hook-woocommerce

我使用以下钩子

function dvpi_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id, $variations ) {
    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'dvpi_add_to_cart_validation', 10, 5 );
Run Code Online (Sandbox Code Playgroud)

对于“变量”类型的产品,这有效


问题是,如果产品的类型是“single”,这个钩子也会被执行,但需要 3 个参数,否则我会收到以下错误消息:

function dvpi_add_to_cart_validation( $passed, $product_id, $quantity ) {
    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'dvpi_add_to_cart_validation', 10, 3 );
Run Code Online (Sandbox Code Playgroud)

致命错误:未捕获的 ArgumentCountError:函数 dvpi_add_to_cart_validation() 的参数太少,第 288 行在 /data/sites/web/.../wp-includes/class-wp-hook.php 中传递了 3 个参数,并且在 .. 。

如果我要检查产品类型的功能中的条件“来得太晚了”。

我该如何解决这个问题?

小智 8

您可以将功能参数更改为可选,如下所示,并检查单一产品和变体产品是否有效。

function dvpi_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id = 0, $variations = null) {
    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'dvpi_add_to_cart_validation', 10, 5 );
Run Code Online (Sandbox Code Playgroud)