WooCommerce исключает определенные атрибуты продукта со страницы магазина

Я ломал голову над этим. В настоящее время для отображения всех пользовательских атрибутов товара на странице магазина (не путать со страницей товара) я использую:

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] состояние. У кого-нибудь есть идеи, как я могу удалить это для определенных атрибутов на странице магазина? Я в полной растерянности. Спасибо за любую помощь.

1

Решение

Как уже упоминалось в моем комментарии, вы можете контролировать атрибуты любого продукта через 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 устарела.

2

Другие решения

Попробуй это!

<?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;
}
}
?>
0

По вопросам рекламы [email protected]