@Oviplokos

Как ограничить количество атрибутов выводимых в каталог товара?

Помогите разобраться, каким образом ограничить количество атрибутов, выводящихся в каталог товара?
Через плагин woocommerce show attributes вывожу атрибуты в каталог продуктов, но проблема в том, что выводятся вообще все, а хотелось бы чтобы именно в каталоге товаров выводилось по 2-3 атрибута. А вот в карточке товара пусть отображаются все атрибуты, которые задаешь товару.
Как в woocommerce вывести определенный атрибут товара в каталоге?
В этом вопросе у кого-то было решение выводить только определенные атрибуты в карточку товара, но ссылка на решение в том вопросе уже некликабельна.
Как разобраться в этой проблеме?
  • Вопрос задан
  • 326 просмотров
Пригласить эксперта
Ответы на вопрос 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Я не знаю, как работает ваш woocommerce show attribute

Но вот примерно так работает стандартная woo функция чуть подпилена для того, что бы вы могли задать сколько атрибутов надо. И сразу добавлен вывод.

так делать конечно не стоит с точки зрения красоты кода, но насколько я понимаю, вам на это наплевать плюс все видно сразу в одном месте, при необходимости увидев как оно работает, можете сделать как нравится

function wpp_get_product_attributes( $product = null, $count = null ) {

		if ( empty( $product ) ) :
			global $product;
		endif;

		$attributes = array_filter( $product->get_attributes(), 'wc_attributes_array_filter_visible' );

		$i = 1;
		foreach ( $attributes as $attribute ) {

			if ( ! empty( (int) $count ) && (int) $count > $i ) {
				break;
			}

			$values = [];

			if ( $attribute->is_taxonomy() ) {
				$attribute_taxonomy = $attribute->get_taxonomy_object();
				$attribute_values   = wc_get_product_terms( $product->get_id(), $attribute->get_name(), [ 'fields' => 'all' ] );

				foreach ( $attribute_values as $attribute_value ) {
					$value_name = esc_html( $attribute_value->name );

					if ( $attribute_taxonomy->attribute_public ) {
						$values[] = '<a href="' . esc_url( get_term_link( $attribute_value->term_id, $attribute->get_name() ) ) . '" rel="tag">' . $value_name . '</a>';
					} else {
						$values[] = $value_name;
					}
				}
			} else {
				$values = $attribute->get_options();

				foreach ( $values as &$value ) {
					$value = make_clickable( esc_html( $value ) );
				}
			}

			$product_attributes[ 'attribute_' . sanitize_title_with_dashes( $attribute->get_name() ) ] = [
				'label' => wc_attribute_label( $attribute->get_name() ),
				'value' => apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values ),
			];

			$i ++;
		}

		$product_attributes = apply_filters( 'woocommerce_display_product_attributes', $product_attributes, $product );

		?>
		<table class="woocommerce-product-attributes shop_attributes">
			<?php foreach ( $product_attributes as $product_attribute_key => $product_attribute ) : ?>
				<tr class="woocommerce-product-attributes-item woocommerce-product-attributes-item--<?php echo esc_attr( $product_attribute_key ); ?>">
					<th class="woocommerce-product-attributes-item__label"><?php echo wp_kses_post( $product_attribute['label'] ); ?></th>
					<td class="woocommerce-product-attributes-item__value"><?php echo wp_kses_post( $product_attribute['value'] ); ?></td>
				</tr>
			<?php endforeach; ?>
		</table>


		<?php
	}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы