更改 WooCommerce 产品名称以在选择属性时包含属性
Change WooCommerce Product Name to Include Attribute When Attribute Selected
我参考了 的答案,效果很好!
但我在主页上使用 woocommerce shortcode 显示产品,不知道如何调整,所以它也适用于主页。
我尝试调整仅选择产品页面的行以包括主页,但它不起作用:
// Only single product pages
if( ! is_product() && ! is_home() ) return $title;
如有任何建议,我们将不胜感激!
这仅适用于具有 颜色 产品属性 (对于变体) 的 可变产品 ],它会将选定的颜色属性标签值附加到产品标题。
对于您的主页,您将使用 WordPress 条件标签 is_front_page()
...
您还必须设置您在短代码中使用的 产品 ID。
1) 在主页中我有这个短代码示例 (具有可变产品 ID):
[product_page id="40"]
2) 使其同时适用于单个产品页面和主页(产品简码):
add_filter( 'wp_footer','custom_product_title_script' );
function custom_product_title_script(){
// Only single product pages and home page
if( ! ( is_product() || is_front_page() ) ) return;
// HERE Set your home product ID
$shortcode_product_id = 40; // <===== ===== ===== HERE your Shortcode Product ID
$product_id = is_product() ? get_the_id() : $shortcode_product_id;
// get an instance of the WC_Product Object
$product = wc_get_product( $product_id );
// Only for variable products
if( ! $product->is_type( 'variable' ) ) return;
// Here set your specific product attributes in this array (coma separated):
$attributes = array('pa_color');
// The 1st loop for variations IDs
foreach($product->get_visible_children( ) as $variation_id ) {
// The 2nd loop for attribute(s)/value
foreach($product->get_available_variation( $variation_id )['attributes'] as $key => $value_id ){
$taxonomy = str_replace( 'attribute_', '', $key ); // Get the taxonomy of the product attribute
// Just for defined attributes
if( in_array( $taxonomy, $attributes) ){
// Set and structure data in an array( variation ID => product attribute => term name )
$data[ $variation_id ][$taxonomy] = get_term_by( 'slug', $value_id, $taxonomy )->name;
}
}
}
?>
<script type="text/javascript">
(function($){
// variables initialization
var variationsData = <?php echo json_encode($data); ?>,
productTitle = $('.product_title').text(),
color = 'pa_color';
// function that get the selected variation and change title
function update_the_title( productTitle, variationsData, color ){
$.each( variationsData, function( index, value ){
if( index == $('input.variation_id').val() ){
$('.product_title').text(productTitle+' - '+value[color]);
return false;
} else {
$('.product_title').text(productTitle);
}
});
}
// Once all loaded
setTimeout(function(){
update_the_title( productTitle, variationsData, color );
}, 300);
// On live event: select fields
$('select').blur( function(){
update_the_title( productTitle, variationsData, color );
});
})(jQuery);
</script>
<?php
}
此代码可以在任何带有构造函数的插件文件中使用(但不在 function.php 文件中)。
已测试并有效。
我参考了
但我在主页上使用 woocommerce shortcode 显示产品,不知道如何调整,所以它也适用于主页。
我尝试调整仅选择产品页面的行以包括主页,但它不起作用:
// Only single product pages
if( ! is_product() && ! is_home() ) return $title;
如有任何建议,我们将不胜感激!
这仅适用于具有 颜色 产品属性 (对于变体) 的 可变产品 ],它会将选定的颜色属性标签值附加到产品标题。
对于您的主页,您将使用 WordPress 条件标签 is_front_page()
...
您还必须设置您在短代码中使用的 产品 ID。
1) 在主页中我有这个短代码示例 (具有可变产品 ID):
[product_page id="40"]
2) 使其同时适用于单个产品页面和主页(产品简码):
add_filter( 'wp_footer','custom_product_title_script' );
function custom_product_title_script(){
// Only single product pages and home page
if( ! ( is_product() || is_front_page() ) ) return;
// HERE Set your home product ID
$shortcode_product_id = 40; // <===== ===== ===== HERE your Shortcode Product ID
$product_id = is_product() ? get_the_id() : $shortcode_product_id;
// get an instance of the WC_Product Object
$product = wc_get_product( $product_id );
// Only for variable products
if( ! $product->is_type( 'variable' ) ) return;
// Here set your specific product attributes in this array (coma separated):
$attributes = array('pa_color');
// The 1st loop for variations IDs
foreach($product->get_visible_children( ) as $variation_id ) {
// The 2nd loop for attribute(s)/value
foreach($product->get_available_variation( $variation_id )['attributes'] as $key => $value_id ){
$taxonomy = str_replace( 'attribute_', '', $key ); // Get the taxonomy of the product attribute
// Just for defined attributes
if( in_array( $taxonomy, $attributes) ){
// Set and structure data in an array( variation ID => product attribute => term name )
$data[ $variation_id ][$taxonomy] = get_term_by( 'slug', $value_id, $taxonomy )->name;
}
}
}
?>
<script type="text/javascript">
(function($){
// variables initialization
var variationsData = <?php echo json_encode($data); ?>,
productTitle = $('.product_title').text(),
color = 'pa_color';
// function that get the selected variation and change title
function update_the_title( productTitle, variationsData, color ){
$.each( variationsData, function( index, value ){
if( index == $('input.variation_id').val() ){
$('.product_title').text(productTitle+' - '+value[color]);
return false;
} else {
$('.product_title').text(productTitle);
}
});
}
// Once all loaded
setTimeout(function(){
update_the_title( productTitle, variationsData, color );
}, 300);
// On live event: select fields
$('select').blur( function(){
update_the_title( productTitle, variationsData, color );
});
})(jQuery);
</script>
<?php
}
此代码可以在任何带有构造函数的插件文件中使用(但不在 function.php 文件中)。
已测试并有效。