Я ломал голову над этим. В настоящее время для отображения всех пользовательских атрибутов товара на странице магазина (не путать со страницей товара) я использую:
function show_attr() {
global $product;
echo '<div class="attributes">';
$product->list_attributes();
echo'</div>'
}
Это прекрасно работает и отображает все атрибуты продукта, но я хочу включить только некоторые. Я также пытался следовать этот человек совет:
<?php foreach ( $attributes as $attribute ) :
if ( empty( $attribute['is_visible'] ) || 'CSC Credit' == $attribute['name'] || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
continue;
} else {
$has_row = true;
}
?>
Так что к сожалению тоже не сработало. Мне удалось удалить нужный атрибут, но он удаляет его на КАЖДОЙ странице, и я хочу исключить его только со страницы магазина.
Я вижу, что переменная $ attribute имеет это [is_visible]
состояние. У кого-нибудь есть идеи, как я могу удалить это для определенных атрибутов на странице магазина? Я в полной растерянности. Спасибо за любую помощь.
Как уже упоминалось в моем комментарии, вы можете контролировать атрибуты любого продукта через woocommerce_get_product_attributes
фильтр. $attributes
проходящие через этот фильтр находятся в ассоциативном массиве массивов. с атрибутом «slug» в качестве ключа массива. В качестве примера var_dump()
может выявить следующее $attributes
,
array (size=1)
'pa_color' =>
array (size=6)
'name' => string 'pa_color' (length=8)
'value' => string '' (length=0)
'position' => string '0' (length=1)
'is_visible' => int 0
'is_variation' => int 1
'is_taxonomy' => int 1
Если атрибут представляет собой таксономию, слаг будет иметь префикс «pa_», который я всегда считал символом продукта. У атрибута, который не является таксономией, будет просто имя для слага, например: «размер».
С помощью WooCommerce Условные теги вы можете специально настроить атрибуты только на странице магазина.
Вот два примера фильтров, первый для исключения определенного атрибута:
// Exclude a certain product attribute on the shop page
function so_39753734_remove_attributes( $attributes ) {
if( is_shop() ){
if( isset( $attributes['pa_color'] ) ){
unset( $attributes['pa_color'] );
}
}
return $attributes;
}
add_filter( 'woocommerce_product_get_attributes', 'so_39753734_remove_attributes' );
И последнее предназначено для создания настраиваемого списка атрибутов на основе атрибутов, которые вы хотите включить.
// Include only a certain product attribute on the shop page
function so_39753734_filter_attributes( $attributes ) {
if( is_shop() ){
$new_attributes = array();
if( isset( $attributes['pa_color'] ) ){
$new_attributes['pa_color'] = $attributes['pa_color'] ;
}
$attributes = $new_attributes;
}
return $attributes;
}
add_filter( 'woocommerce_product_get_attributes', 'so_39753734_filter_attributes' );
обновленный 29 марта 2018 г. с woocommerce_product_get_attributes
поскольку woocommerce_get_product_attributes
устарела.
Попробуй это!
<?php
if (is_page('shop')) {
foreach ( $attributes as $attribute ) :
if ( empty( $attribute['is_visible'] ) || 'CSC Credit' == $attribute['name'] || ( $attribute['is_taxonomy'] && ! taxonomy_exists( $attribute['name'] ) ) ) {
continue;
} else {
$has_row = true;
}
}
?>