我正在使用WooCommerce,并且我集成了一些自定义字段,以允许用户指定新值,我以后将其附加到产品标题。
我正在使用 update_post_meta
/ get_post_meta
来保存 new 信息。该部分工作正常。
然后,我使用过滤器woocommerce_product_title
更新标题。当使用$product->get_title()
时,此过滤器正常工作,但是在使用$product->get_name()
时不会做任何事情,这不是问题,因为在某些地方我不想附加新信息。
我还将过滤器the_title
用于产品页面。
基本上,我的代码在下面看起来像是return_custom()
是函数,而不是基于产品ID构建新信息。
function update_title($title, $id = null ) {
$prod=get_post($id);
if (empty($prod->ID) || strcmp($prod->post_type,'product')!=0 ) {
return $title;
}
return $title.return_custom($id);
}
function update_product_title($title, $product) {
$id = $product->get_id();
return $title.return_custom($id);
}
add_filter( 'woocommerce_product_title', 'update_product_title', 9999, 2);
add_filter( 'the_title', 'update_title', 10, 2 );
将产品添加到购物车中时会出现问题。使用的名称是默认一个,因此我的下面代码不足以更新购物车中使用的产品名称。通知邮件的相同内容。我想这是合乎逻辑的,因为电子邮件将使用购物车的信息。
我很确定add_to_cart()
内的一切都发生了,但是我找不到与产品名称相关的任何过滤器/钩子。
如何确保购物车中使用的名称很好?除了我已经使用的过滤器/钩子外,我还考虑过将新信息附加到购物车中的产品标题的哪些过滤器/钩子?
我想确保在所有购物过程中都能看到新标题。从产品页面直到通知邮件。
以下将允许您在购物车,结帐,订单和电子邮件通知中自定义产品名称,只需使用一个挂钩功能:
// Just used for testing
function return_custom( $id ) {
return ' - (' . $id . ')';
}
// Customizing cart item name in cart, checkout, orders and email notifications
add_action( 'woocommerce_before_calculate_totals', 'set_custom_cart_item_name', 10, 1 );
function set_custom_cart_item_name( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Required since Woocommerce version 3.2 for cart items properties changes
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// Get the product name and the product ID
$product_name = $cart_item['data']->get_name();
$product_id = $cart_item['data']->get_id();
// Set the new product name
$cart_item['data']->set_name( $product_name . return_custom($product_id) );
}
}
代码在您的活动子主题(或活动主题)的功能上启用函数。测试并有效。
尝试使用woocommerce_cart_item_name
过滤器。
[woocommerce_cart]
短码使用 cart/cart.php
模板,显示标题的代码是:
if ( ! $product_permalink ) {
echo wp_kses_post( apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . ' ' );
} else {
echo wp_kses_post( apply_filters( 'woocommerce_cart_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_permalink ), $_product->get_name() ), $cart_item, $cart_item_key ) );
}