虽然这个函数似乎在前端很好地工作,但是在后端我有:
临界未明错误:在.中调用null上的成员函数get_cart_contents_weight()
这就是功能。
add_filter( 'woocommerce_available_payment_gateways', 'hide_payment_gateways_based_on_weight', 10, 1 );
function hide_payment_gateways_based_on_weight( $available_gateways ) {
if ( is_admin() )
return $available_gateways;
$total_weight = WC()->cart->get_cart_contents_weight();
if ( $total_weight >= 2000 && isset ($available_gateways['cod']) )
unset($available_gateways['cod']); // unset 'cod'
return $available_gateways;
}发布于 2022-04-23 11:10:25
您的函数在管理员上抛出一个关键错误的原因是因为WC中没有cart。在WC管理程序中,使用is_admin()不起作用,所以您的$total_weight声明会抛出错误。
要确保您只显示在购物车或结账上的网关,请使用这些条件。
而且不管值多少钱..。WPCS和PHPCS不喜欢内联控制。为了获得更清晰的可读性,您应该将if语句封装在括号中。
add_filter( 'woocommerce_available_payment_gateways', 'hide_payment_gateways_based_on_weight', 10, 1 );
function hide_payment_gateways_based_on_weight( $available_gateways ) {
// Check if it's the cart page or the checkout.
if ( is_cart() || is_checkout() ) {
$total_weight = WC()->cart->get_cart_contents_weight();
if ( 2000 >= $total_weight && isset( $available_gateways['cod'] ) ) {
unset( $available_gateways['cod'] ); // unset 'cod'.
}
}
return $available_gateways;
}发布于 2022-04-22 20:33:14
$WC_Cart = new WC_Cart();
$total_weight = $WC_Cart->get_cart_contents_weight();试着像这样变胖。
发布于 2022-04-22 20:33:14
一阶问题是WC()->cart中的cart没有定义/null。在试图获得权重之前,您应该检查是否定义了这个值。为什么cart是空的,这是一个二阶问题,我们不能用这个代码段来确定。这可能只是一个正常的未初始化的情况或其他一些问题。
https://stackoverflow.com/questions/71974212
复制相似问题