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

时间:2019-03-20 14:20:55

标签: php wordpress woocommerce cart hook-woocommerce

我正在使用Woocommerce,并且集成了一些自定义字段,以允许用户指定新值,这些新值稍后将附加到产品标题上。

我正在使用update_post_meta / get_post_meta保存信息。这部分工作正常。

然后,我使用过滤器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()内部正在发生所有事情,但是我找不到与产品名称相关的任何过滤器/挂钩。

如何确保购物车中使用的名称正确?为了将新信息附加到购物车中的产品标题上,我除了正在使用的过滤器/挂钩外还应该考虑什么?

我想确保在所有购物过程中都能看到新标题。从产品页面直到通知邮件。

2 个答案:

答案 0 :(得分:1)

以下内容使您可以通过一个钩子功能自定义购物车,结帐,订单和电子邮件通知中的产品名称:

validateCisco()
{
input="$1"
echo -n "" > output.txt
echo "$input" | while IFS= read -r cmd; do
  valid=false
  cat cmds_cisco.txt | while IFS= read -r valid_cmd; do
    echo $cmd | grep -q -P "$valid_cmd"
    if [ $? = 0 ]; then
     valid=true
     echo $valid
     break
    fi
  done
  # output as txt
  echo "$valid"
  if [ "$valid" = false ]; then echo '!!'"$cmd" >> output.txt; echo Invalid command '"'"$cmd"'"'; else echo "$cmd" >> output.txt; fi
done
}
echo "ip address \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" > cmds_cisco.txt    
validateCisco "ip address 1.2.3.4 255.255.255.0"

代码在您的活动子主题(或活动主题)的function.php文件上。经过测试,可以正常工作。

答案 1 :(得分:0)

尝试使用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 ) );
}