问题描述
在 WooCommerce 中,我目前正在构建一个功能,该功能将在商店页面中回显某些产品属性。如果有多个可用的属性值,我想用逗号分隔它们,但我不知道如何。
我的代码:
add_action('woocommerce_after_shop_loop_item_title','TitleVariations',10);
function TitleVariations()
{
global $product;
$colormonth = $product->get_attribute('color-month');
$finish = $product->get_attribute('finish');
$design = $product->get_attribute('design');
echo '<span class="variation-display">';
echo __($colormonth,'woocommerce');
echo __($finish,'woocommerce');
echo __($crossdesign,'woocommerce');
echo '</span>';
}
解决方法
收集你的值到数组然后implode
这个数组:
$values = [
__($colormonth,'woocommerce'),__($finish,__($crossdesign,];
// if some values returned by `__()` are empty strings,// you can filter your array so as to remove them
$values = array_filter($values);
echo '<span class="variation-display">';
echo implode(',',$values);
echo '</span>';
,
当有多个值时,WC_Product 方法 get_attribute()
给出一个逗号分隔的值字符串……您还需要检查每个不同的属性是否在列表中都有一个术语……
要获取产品属性标签名称,可以使用wc_attribute_label()
产品属性函数。
1)。如果您想使用标签名称和术语值(每个不同的属性在一行中)获取每个产品属性,您将使用以下内容。
此代码还处理自定义产品属性:
add_action('woocommerce_after_shop_loop_item_title','display_loop_product_attributtes',10);
function display_loop_product_attributtes()
{
global $product;
// Here define your product attribute names (slugs)
$attribute_names = array('color-month','finish','design');
$attributes = array(); // Initializing
// Loop Through product attributes array
foreach( $attribute_names as $attribute_name ) {
if( taxonomy_exists( 'pa_' . $attribute_name ) ) {
$attribute = 'pa_' . $attribute_name; // Custom taxonomy
} else {
$attribute = $attribute_name; // Custom attribute (not a taxonomy)
}
$values_str = $product->get_attribute($attribute);
if ( $values_str ) {
$attributes[] = '<strong>' . wc_attribute_label($attribute) . ':</strong> ' . $values_str;
}
}
// Output product attribute label / values pairs (one by line)
if( ! empty( $attributes ) ) {
echo '<span class="variation-display">' . implode( '<br>',$attributes ) . '</span>';
}
}
2)。但是,如果您想以逗号分隔的字符串形式获取所有产品属性术语,您的代码将类似于 Display specific product attributes under product title in Woocommerce archive pages 中的内容。
所以对于您的代码:
add_action('woocommerce_after_shop_loop_item_title',10);
function display_loop_product_attributtes()
{
global $product;
$color_month = $product->get_attribute('color-month');
$finish = $product->get_attribute('finish');
$design = $product->get_attribute('design');
$attributes = array(); // Initializing
if ( $color_month ) {
$attributes[] = $color_month;
}
if ( $finish ) {
$attributes[] = $finish;
}
if ( $design ) {
$attributes[] = $design;
}
// Output product attribute values
if( ! empty( $attributes ) ) {
echo '<span class="variation-display">' . implode( ',$attributes ) . '</span>';
}
}
代码位于活动子主题(或活动主题)的functions.php 文件中。它应该有效。