从所选变体向 WooCommerce 变量产品标题添加一些属性值
Add some attribute values to WooCommerce variable product title from chosen variation
我正在寻求一些帮助,让 WooCommerce 可变产品标题根据变体进行更改。在这种特定情况下,我希望在选择颜色时更改标题,例如 "Productname Black".
是否有任何简单的代码片段可以让它发挥作用?
更新 04-2021 - 在 WooCommerce 5.1+ 上成功测试 (处理自定义产品属性)
以下代码将向变量产品标题添加从特定定义的产品属性中选择的变体的值(或者所有这些都是可选的) :
代码:
// Defining product Attributes term names to be displayed on variable product title
add_filter( 'woocommerce_available_variation', 'filter_available_variation_attributes', 10, 3 );
function filter_available_variation_attributes( $data, $product, $variation ){
// Here define the product attribute(s) slug(s) which values will be added to the product title
// Or replace the array with 'all' string to display all attribute values
$attribute_names = array('Custom', 'Color');
foreach( $data['attributes'] as $attribute => $value ) {
$attribute = str_replace('attribute_', '', $attribute);
$attribute_name = wc_attribute_label($attribute, $variation);
if ( ( is_array($attribute_names) && in_array($attribute_name, $attribute_names) ) || $attribute_names === 'all' ) {
$value = taxonomy_exists($attribute) ? get_term_by( 'slug', $value, $attribute )->name : $value;
$data['for_title'][$attribute_name] = $value;
}
}
return $data;
}
// Display to variable product title, defined product Attributes term names
add_action( 'woocommerce_after_variations_form', 'add_variation_attribute_on_product_title' );
function add_variation_attribute_on_product_title(){
// Here define the separator string
$separator = ' - ';
?>
<script type="text/javascript">
(function($){
var name = '<?php global $product; echo $product->get_name(); ?>';
$('form.cart').on('show_variation', function(event, data) {
var text = '';
$.each( data.for_title, function( key, value ) {
text += '<?php echo $separator; ?>' + value;
});
$('.product_title').text( name + text );
}).on('hide_variation', function(event, data) {
$('.product_title').text( name );
});
})(jQuery);
</script>
<?php
}
显示所有属性
您可以通过将变量 $attribute_names
定义为 "all"
来显示所选变体的所有变体属性值,例如:
$attribute_names = "all";
代码进入您的活动 child 主题(或主题)的 functions.php 文件或任何插件文件。
经过测试并且可以正常工作……您会得到类似以下内容:
我正在寻求一些帮助,让 WooCommerce 可变产品标题根据变体进行更改。在这种特定情况下,我希望在选择颜色时更改标题,例如 "Productname Black".
是否有任何简单的代码片段可以让它发挥作用?
更新 04-2021 - 在 WooCommerce 5.1+ 上成功测试 (处理自定义产品属性)
以下代码将向变量产品标题添加从特定定义的产品属性中选择的变体的值(或者所有这些都是可选的) :
代码:
// Defining product Attributes term names to be displayed on variable product title
add_filter( 'woocommerce_available_variation', 'filter_available_variation_attributes', 10, 3 );
function filter_available_variation_attributes( $data, $product, $variation ){
// Here define the product attribute(s) slug(s) which values will be added to the product title
// Or replace the array with 'all' string to display all attribute values
$attribute_names = array('Custom', 'Color');
foreach( $data['attributes'] as $attribute => $value ) {
$attribute = str_replace('attribute_', '', $attribute);
$attribute_name = wc_attribute_label($attribute, $variation);
if ( ( is_array($attribute_names) && in_array($attribute_name, $attribute_names) ) || $attribute_names === 'all' ) {
$value = taxonomy_exists($attribute) ? get_term_by( 'slug', $value, $attribute )->name : $value;
$data['for_title'][$attribute_name] = $value;
}
}
return $data;
}
// Display to variable product title, defined product Attributes term names
add_action( 'woocommerce_after_variations_form', 'add_variation_attribute_on_product_title' );
function add_variation_attribute_on_product_title(){
// Here define the separator string
$separator = ' - ';
?>
<script type="text/javascript">
(function($){
var name = '<?php global $product; echo $product->get_name(); ?>';
$('form.cart').on('show_variation', function(event, data) {
var text = '';
$.each( data.for_title, function( key, value ) {
text += '<?php echo $separator; ?>' + value;
});
$('.product_title').text( name + text );
}).on('hide_variation', function(event, data) {
$('.product_title').text( name );
});
})(jQuery);
</script>
<?php
}
显示所有属性
您可以通过将变量 $attribute_names
定义为 "all"
来显示所选变体的所有变体属性值,例如:
$attribute_names = "all";
代码进入您的活动 child 主题(或主题)的 functions.php 文件或任何插件文件。
经过测试并且可以正常工作……您会得到类似以下内容: