到处都在WooCommerce产品名称中添加前缀/后缀,包括购物车和电子邮件



我正在使用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 ) );
}

相关内容

  • 没有找到相关文章

最新更新