根据产品运输更改 WooCommerce 运输方式完整标签 class
Change WooCommerce shipping method full label based on product shipping class
我想在 WooCommerce 的购物车页面上添加自定义消息。该消息应根据分配给产品的运费 class 在 woocommerce_cart_shipping_method_full_label
挂钩中显示。
我已经有了执行此操作的代码,但是当我将它分配给那个挂钩时它不起作用,只有当我将它分配给 woocommerce_before_calculate_totals
挂钩时它才起作用。
当我想将它添加到 woocommerce_cart_shipping_method_full_label
挂钩时,我收到消息:
Fatal error: Uncaught Error: Call to a member function get_cart()
有人可以告诉我我做错了什么吗?我正在使用带有子主题的店面模板。
基于 答案代码,这是我在 functions.php:
中使用的代码
add_action( 'woocommerce_cart_shipping_method_full_label', 'cart_items_shipping_class_message', 20, 1 );
function cart_items_shipping_class_message( $cart ){
if ( ! is_cart() || ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
return;
if ( did_action( 'woocommerce_cart_shipping_method_full_label' ) >= 2 )
return;
$shipping_class_id = '28'; // Your shipping class Id
// Loop through cart items
foreach( $cart->get_cart() as $cart_item ) {
// Check cart items for specific shipping class, displaying a notice
if( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ){
wc_clear_notices();
wc_add_notice( sprintf( __('My custom message.', 'woocommerce'), '' . __("Pallet Shipping", "woocommerce") . ''), 'notice' );
break;
}
}
}
将一个钩子映射到另一个钩子的代码有时需要进行一些调整,具体取决于原始钩子和新映射的钩子:
- 例如,
$cart
没有传递给回调函数,因此您得到的错误消息是
wc_clear_notices()
和 wc_add_notice()
不适用,因为您要使用的挂钩是更改 $label
if ( did_action( 'woocommerce_cart_shipping_method_full_label' ) >= 2 )
不存在
所以你得到:
function filter_woocommerce_cart_shipping_method_full_label( $label, $method ) {
// Your shipping class Id
$shipping_class_id = 28;
// WC Cart
if ( WC()->cart ) {
// Get cart
$cart = WC()->cart;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Check cart items for specific shipping class
if ( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ) {
$label = __( 'My custom message', 'woocommerce' );
break;
}
}
}
return $label;
}
add_filter( 'woocommerce_cart_shipping_method_full_label', 'filter_woocommerce_cart_shipping_method_full_label', 10, 2 );
我想在 WooCommerce 的购物车页面上添加自定义消息。该消息应根据分配给产品的运费 class 在 woocommerce_cart_shipping_method_full_label
挂钩中显示。
我已经有了执行此操作的代码,但是当我将它分配给那个挂钩时它不起作用,只有当我将它分配给 woocommerce_before_calculate_totals
挂钩时它才起作用。
当我想将它添加到 woocommerce_cart_shipping_method_full_label
挂钩时,我收到消息:
Fatal error: Uncaught Error: Call to a member function get_cart()
有人可以告诉我我做错了什么吗?我正在使用带有子主题的店面模板。
基于
add_action( 'woocommerce_cart_shipping_method_full_label', 'cart_items_shipping_class_message', 20, 1 );
function cart_items_shipping_class_message( $cart ){
if ( ! is_cart() || ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
return;
if ( did_action( 'woocommerce_cart_shipping_method_full_label' ) >= 2 )
return;
$shipping_class_id = '28'; // Your shipping class Id
// Loop through cart items
foreach( $cart->get_cart() as $cart_item ) {
// Check cart items for specific shipping class, displaying a notice
if( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ){
wc_clear_notices();
wc_add_notice( sprintf( __('My custom message.', 'woocommerce'), '' . __("Pallet Shipping", "woocommerce") . ''), 'notice' );
break;
}
}
}
将一个钩子映射到另一个钩子的代码有时需要进行一些调整,具体取决于原始钩子和新映射的钩子:
- 例如,
$cart
没有传递给回调函数,因此您得到的错误消息是 wc_clear_notices()
和wc_add_notice()
不适用,因为您要使用的挂钩是更改$label
if ( did_action( 'woocommerce_cart_shipping_method_full_label' ) >= 2 )
不存在
所以你得到:
function filter_woocommerce_cart_shipping_method_full_label( $label, $method ) {
// Your shipping class Id
$shipping_class_id = 28;
// WC Cart
if ( WC()->cart ) {
// Get cart
$cart = WC()->cart;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Check cart items for specific shipping class
if ( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ) {
$label = __( 'My custom message', 'woocommerce' );
break;
}
}
}
return $label;
}
add_filter( 'woocommerce_cart_shipping_method_full_label', 'filter_woocommerce_cart_shipping_method_full_label', 10, 2 );