在WooCommerce中,我有这段代码在档案页面上显示产品属性slugs,例如 shop 页面:
if (!function_exists('shop_attributes_in_loop')) {
function shop_attributes_in_loop(){
global $product;
$attributes = $product->get_attributes();
if(!empty($attributes)){
$attribute_single = array_keys($attributes);
$myArray = array();
echo '<div class="product_attributes">';
foreach ($attribute_single as $attribute => $value) {
$myArray[] = ucfirst($value);
}
echo implode(', ', $myArray).'</div>';
}
}
}
add_action('woocommerce_after_shop_loop_item', 'shop_attributes_in_loop');
他们只显示属性字段名称为 pa_size
, pa_color
如何获取并显示该产品属性的值(例如 2kg
, 3kg
或 {{1} } , blue
)?
感谢。
答案 0 :(得分:2)
使用此代码很简单(示例1):
function nt_product_attributes() {
global $product;
if ( $product->has_attributes() ) {
$attributes = ( object ) array (
'color' => $product->get_attribute( 'pa_color' ),
'size' => $product->get_attribute( 'pa_size' ),
);
return $attributes;
}
}
用法:
$attributes = nt_product_attributes();
echo $attributes->color;
echo $attributes->size;
OR(例2)
function nt_product_attributes() {
global $product;
if ( $product->has_attributes() ) {
$attributes = array (
'color' => $product->get_attribute('pa_color'),
'size' => $product->get_attribute('pa_size'),
);
return $attributes;
}
}
用法:
$attributes = nt_product_attributes();
echo $attributes['color'];
echo $attributes['size'];
答案 1 :(得分:0)
要获取需要使用get_terms()
的属性值,请将内部作为参数的WC产品属性标记为 pa_size
, pa_color
< / strong> ...因此,要显示每个属性的相应值,您需要第二个foreach循环。
所以你的代码可能是这样的:
if (!function_exists('shop_attributes_in_loop')) {
function shop_attributes_in_loop(){
global $product;
//Getting product attributes
$product_attributes = $product->get_attributes();
if(!empty($product_attributes)){
//Getting product attributes slugs
$product_attribute_slugs = array_keys($product_attributes);
$count_slug = 0;
echo '<div class="product_attributes">';
foreach ($product_attribute_slugs as $product_attribute_slug){
$count_slug++;
// Removing "pa_" from attribute slug and adding a cap to first letter
$attribute_name = ucfirst( str_replace('pa_', '', $product_attribute_slug) );
echo $attribute_name . ' (';
## ===> ===> // Getting the product attribute values
$attribute_values = get_terms($product_attribute_slug);
$count_value = 0;
foreach($attribute_values as $attribute_value){
$count_value++;
$attribute_name_value = $attribute_value->name; // name value
$attribute_slug_value = $attribute_value->slug; // slug value
$attribute_slug_value = $attribute_value->term_id; // ID value
// Displaying HERE the "names" values for an attribute
echo $attribute_name_value;
if($count_value != count($attribute_values)) echo ', ';
}
if($count_slug != count($product_attribute_slugs)) echo '), ';
else echo ').';
}
echo '</div>';
}
}
}
add_action('woocommerce_after_shop_loop_item', 'shop_attributes_in_loop');
并将显示例如类似的内容(名称值为 pa_color
和 pa_size
):
Color (Black, Blue, Green), Size (30, 32, 34, 36, 38, 40, 42, 44).
代码进入活动子主题(活动主题或任何插件文件)的function.php文件中。
此代码经过测试且有效。