向 WooCommerce 产品变体添加后缀会被覆盖
Adding postfix to WooCommerce product variation gets overwritten
我开始期待 WooCommerce 中内置了一些 "update function",它只允许我重命名变体 post_title 一段时间。然后它又回到钩子/WooCommerce 决定的状态?
我想以编程方式向特定变体添加post诸如“(已取消)”之类的修复。
$new_title = get_the_title( $variationid ) . ' (Cancelled)';
wp_update_post(array('ID' =>$variationid, 'post_title' => $new_title));
这只是 "hangs on" 一小会儿...
我尝试禁用此挂钩,然后更改标题,但它仍然被覆盖。
add_filter( 'woocommerce_product_variation_title_include_attributes', '__return_false' );
有什么方法可以让 WooCommerce 停止覆盖变体标题?
我的解决方案基于@LoicTheAztec 的回答,使用基于我自定义 post 状态的逻辑 "cancelled"。
add_filter( 'woocommerce_product_variation_title', 'filter_product_variation_title_callback', 10, 4 );
function filter_product_variation_title_callback( $variation_title, $product, $title_base, $title_suffix ) {
$id = $product->get_id();
$status = get_post_status($id);
if ($status == 'cancelled'){
return $variation_title . ' (' . __("Cancelled", "woocommerce") . ')';
} else {
return $variation_title;
}
}
WooCommerce 中的代码部分及其过滤器。
$should_include_attributes = apply_filters( 'woocommerce_product_variation_title_include_attributes', $should_include_attributes, $product );
$separator = apply_filters( 'woocommerce_product_variation_title_attributes_separator', ' - ', $product );
$title_base = get_post_field( 'post_title', $product->get_parent_id() );
$title_suffix = $should_include_attributes ? wc_get_formatted_variation( $product, true, false ) : '';
return apply_filters( 'woocommerce_product_variation_title', $title_suffix ? $title_base . $separator . $title_suffix : $title_base, $product, $title_base, $title_suffix );
add_filter('woocommerce_product_variation_title', 'change_variation_title_temporary');
function change_variation_title_temporary($variation_title, $product, $title_base, $title_suffix) {
return $title_base . ' (Cancelled)';
}
您应该尝试使用专用的 woocommerce_product_variation_title
过滤器挂钩,它允许暂时更改产品变体标题 (有条件地),这样:
add_filter( 'woocommerce_product_variation_title', 'filter_product_variation_title_callback', 10, 4 );
function filter_product_variation_title_callback( $variation_title, $product, $title_base, $title_suffix ) {
// Conditional custom field (example)
if( $product->get_meta('_is_cancelled') )
$title_base .= ' (' . __("cancelled", "woocommerce") . ')';
return $title_base
}
代码进入活动 child 主题(或活动主题)的 function.php 文件。它应该有效。
Note: The $variation_title
returns the product title including product attributes, that is disabled in the function code above…
订单编辑页面(也反映):
我开始期待 WooCommerce 中内置了一些 "update function",它只允许我重命名变体 post_title 一段时间。然后它又回到钩子/WooCommerce 决定的状态?
我想以编程方式向特定变体添加post诸如“(已取消)”之类的修复。
$new_title = get_the_title( $variationid ) . ' (Cancelled)';
wp_update_post(array('ID' =>$variationid, 'post_title' => $new_title));
这只是 "hangs on" 一小会儿...
我尝试禁用此挂钩,然后更改标题,但它仍然被覆盖。
add_filter( 'woocommerce_product_variation_title_include_attributes', '__return_false' );
有什么方法可以让 WooCommerce 停止覆盖变体标题?
我的解决方案基于@LoicTheAztec 的回答,使用基于我自定义 post 状态的逻辑 "cancelled"。
add_filter( 'woocommerce_product_variation_title', 'filter_product_variation_title_callback', 10, 4 );
function filter_product_variation_title_callback( $variation_title, $product, $title_base, $title_suffix ) {
$id = $product->get_id();
$status = get_post_status($id);
if ($status == 'cancelled'){
return $variation_title . ' (' . __("Cancelled", "woocommerce") . ')';
} else {
return $variation_title;
}
}
WooCommerce 中的代码部分及其过滤器。
$should_include_attributes = apply_filters( 'woocommerce_product_variation_title_include_attributes', $should_include_attributes, $product );
$separator = apply_filters( 'woocommerce_product_variation_title_attributes_separator', ' - ', $product );
$title_base = get_post_field( 'post_title', $product->get_parent_id() );
$title_suffix = $should_include_attributes ? wc_get_formatted_variation( $product, true, false ) : '';
return apply_filters( 'woocommerce_product_variation_title', $title_suffix ? $title_base . $separator . $title_suffix : $title_base, $product, $title_base, $title_suffix );
add_filter('woocommerce_product_variation_title', 'change_variation_title_temporary');
function change_variation_title_temporary($variation_title, $product, $title_base, $title_suffix) {
return $title_base . ' (Cancelled)';
}
您应该尝试使用专用的 woocommerce_product_variation_title
过滤器挂钩,它允许暂时更改产品变体标题 (有条件地),这样:
add_filter( 'woocommerce_product_variation_title', 'filter_product_variation_title_callback', 10, 4 );
function filter_product_variation_title_callback( $variation_title, $product, $title_base, $title_suffix ) {
// Conditional custom field (example)
if( $product->get_meta('_is_cancelled') )
$title_base .= ' (' . __("cancelled", "woocommerce") . ')';
return $title_base
}
代码进入活动 child 主题(或活动主题)的 function.php 文件。它应该有效。
Note: The
$variation_title
returns the product title including product attributes, that is disabled in the function code above…
订单编辑页面(也反映):