Starina_js
@Starina_js
full-stack web dev

Как получить атрибуты в товаре Woocommerce Wordpress?

В шаблоне content-single-product.php есть такая запись
$attributes = $product->get_attributes();

    <?php if($attributes) {echo "<p class='product-desc-title'>Параметры</p>";}  ?>          
<?php foreach ( $attributes as $attribute ) : ?>          
    <?php
            if ( $attribute['is_taxonomy'] ) {
	            global $post;
	            $attribute_names = $attribute;
				
	            foreach ( $attribute_names as $attribute_name ) {
	              $taxonomy = get_taxonomy( $attribute_name );

	                if ( $taxonomy && ! is_wp_error( $taxonomy ) ) {
	                    $terms = wp_get_post_terms( $post->ID, $attribute_name );

	                    $terms_array = array();
	                    $attrID = $attribute['name'];
	                    $paPMat = 'pa_product-material';
	                    $paPColor = 'pa_product-color';
	
	                    // При добавлении новых атрибутов для товаров добавить новый массив с названием атрибута и слагом с приставкой "pa_"
	                    $pAttributes_array = array(
	                        array(
	                            'label' => 'Материал фасадов',
	                            'slug' => 'pa_product-material',
	                        ),
	                        array(
	                            'label' => 'Цвет',
	                            'slug' => 'pa_product-color',
	                        ),
	                        array(
	                            'label' => 'Конфигурация',
	                            'slug' => 'pa_konfiguraciya',
	                        ),
	                        array(
	                            'label' => 'Материал корпуса',
	                            'slug' => 'pa_material-kuxni',
	                        ),
	                        array(
	                            'label' => 'Форма',
	                            'slug' => 'pa_forma',
	                        ),
	                        array(
	                            'label' => 'Тип дверей',
	                            'slug' => 'pa_tip-dverej',
	                        ),
	                        array(
	                            'label' => 'Створки',
	                            'slug' => 'pa_stvorki',
	                        ),
		                array(
	                            'label' => 'Размеры',
	                            'slug' => 'pa_razmery',
	                        ),
	
	                    );
	
	                    foreach ($pAttributes_array as $key => $value) {
	                        if ( ! empty( $terms ) && $attrID ===  $value['slug'] ) {
	                          foreach ( $terms as $term ) {
	                               $archive_link = get_term_link( $term->slug, $attribute_name );
	                               $full_line = '<a href="' . $archive_link . '">'. $term->name . '</a>';
	                               array_push( $terms_array, $full_line );
	                          }
	                          echo '<p class="pa-string">'. $value['label'] .': '. implode( $terms_array, ',  ' ) . '</p>';
	                        }
	                    }
	                }
	            }													
            } else {
              $values = array_map( 'trim', explode( '|', $attribute['value'] ) );
              echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
            }
    ?>
<?php endforeach; ?>


Суть в том, что аттрибуты перестали отображаться после обновления.
var_dump $attribute_names получает массив объектов
var_dump($attribute_name) в цикле foreach ( $attribute_names as $attribute_name ) уже ничего не видит. Область видимости data protected
  • Вопрос задан
  • 4379 просмотров
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
foreach ( $attributes as $attribute ) :
		
		$values = array();
		if ( $attribute->is_taxonomy() ) {
			$attribute_taxonomy = $attribute->get_taxonomy_object();
			$attribute_values = wc_get_product_terms( $product->get_id(), $attribute->get_name(), array( '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 ) );
			}
		}
		
		echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
	endforeach;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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