如果有多个可用值,则以逗号分隔的产品属性术语
Comma separated product attribute terms if there are multiple values available
在 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, 'woocommerce'),
__($crossdesign, 'woocommerce'),
];
// 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', 'display_loop_product_attributtes', 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 文件。它应该有效。
在 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, 'woocommerce'),
__($crossdesign, 'woocommerce'),
];
// 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', 'display_loop_product_attributtes', 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 文件。它应该有效。