Anonymous
Ограничить атрибуты продукта отображаются в списках продуктов WooCommerce
Сообщение
Anonymous » 04 май 2025, 15:57
Я использую код, который отображает атрибуты в списке продуктов, странице архива и категории. < /p>
Код: Выделить всё
/* Show attributes in the product card */
add_action( 'woocommerce_shop_loop_item_title', 'new_template_loop_product_meta', 20 );
function new_template_loop_product_meta() {
global $product;
$attrs_by_cats = [
21 => [ 'pa_size', 'pa_color' ],
23 => [ 'pa_size', 'pa_color' ],
];
$attr_list = [
'Size' => 'pa_size',
'Color' => 'pa_color',
];
if ( ! is_object( $product ) ) {
$product = wc_get_product( get_the_id() );
}
$cats = $product->get_category_ids();
if ( ! is_array( $cats ) ) {
return;
}
$attrs = [];
foreach ( $cats as $cat ) {
if ( isset( $attrs_by_cats[ $cat ] ) ) {
$attrs[] = $attrs_by_cats[ $cat ];
}
}
$allowed_attrs = array_unique( array_merge( [], ...$attrs ) );
echo '';
foreach ( $attr_list as $attr_title => $attr_name ) {
if ( in_array( $attr_name, $allowed_attrs, true ) ) {
show_attribute( $product, $attr_title, $attr_name );
}
}
echo '';
}
/**
* Show attribute.
*
* @param WC_Product $product Product.
* @param string $attr_title Attribute title.
* @param string $attr_name Attribute name.
*/
function show_attribute( $product, $attr_title, $attr_name ) {
if ( 'sku' === $attr_name ) {
$attr = (string) $product->get_sku();
} else {
$attr = $product->get_attribute( $attr_name );
}
if ( '' === $attr ) {
return;
}
echo '' . esc_html( $attr_title ) . ': ' . esc_html( $attr ) . '
';
}
< /code>
Здесь есть небольшая проблема. Если атрибут продукта имеет много значений (более 10-20), то макет карты в списке разрывов продуктов. Например, размер: 30x40, 50x70, 70x70 +15.
Подробнее здесь:
https://stackoverflow.com/questions/796 ... duct-lists
1746363473
Anonymous
Я использую код, который отображает атрибуты в списке продуктов, странице архива и категории. < /p> [code]/* Show attributes in the product card */ add_action( 'woocommerce_shop_loop_item_title', 'new_template_loop_product_meta', 20 ); function new_template_loop_product_meta() { global $product; $attrs_by_cats = [ 21 => [ 'pa_size', 'pa_color' ], 23 => [ 'pa_size', 'pa_color' ], ]; $attr_list = [ 'Size' => 'pa_size', 'Color' => 'pa_color', ]; if ( ! is_object( $product ) ) { $product = wc_get_product( get_the_id() ); } $cats = $product->get_category_ids(); if ( ! is_array( $cats ) ) { return; } $attrs = []; foreach ( $cats as $cat ) { if ( isset( $attrs_by_cats[ $cat ] ) ) { $attrs[] = $attrs_by_cats[ $cat ]; } } $allowed_attrs = array_unique( array_merge( [], ...$attrs ) ); echo ''; foreach ( $attr_list as $attr_title => $attr_name ) { if ( in_array( $attr_name, $allowed_attrs, true ) ) { show_attribute( $product, $attr_title, $attr_name ); } } echo ''; } /** * Show attribute. * * @param WC_Product $product Product. * @param string $attr_title Attribute title. * @param string $attr_name Attribute name. */ function show_attribute( $product, $attr_title, $attr_name ) { if ( 'sku' === $attr_name ) { $attr = (string) $product->get_sku(); } else { $attr = $product->get_attribute( $attr_name ); } if ( '' === $attr ) { return; } echo '' . esc_html( $attr_title ) . ': ' . esc_html( $attr ) . ' '; } < /code> Здесь есть небольшая проблема. Если атрибут продукта имеет много значений (более 10-20), то макет карты в списке разрывов продуктов. Например, размер: 30x40, 50x70, 70x70 +15. [/code] Подробнее здесь: [url]https://stackoverflow.com/questions/79604641/limit-product-attributes-displayed-terms-in-woocommerce-product-lists[/url]