Отобразить атрибуты продукта на странице архивов определенной категории продуктов Woocommerce - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу показать два атрибута на страницах категорий с именем и значением атрибута только для определенных категорий.

Этот код, который я обнаружил, отображает метки атрибутов, но дублирует значение, и яЯ действительно борюсь с переменным шоу, если категории.Любая помощь очень ценится.

screenshot

Код:

add_action('woocommerce_after_shop_loop_item','add_attribute');
function add_attribute() {
    global $product;

    $product_attributes = array( 'pa_set', 'pa_team');
    $attr_output = array();

    // Loop through the array of product attributes
    foreach( $product_attributes as $taxonomy ){
        if( taxonomy_exists($taxonomy) ){
            $label_name = get_taxonomy( $taxonomy )->labels->singular_name;
            $value = $product->get_attribute('pa_set');

               if( ! empty($value) ){
                // Storing attributes for output
                $attr_output[] = '<span class="'.$taxonomy.'">'.$label_name.': 
    '.$value.'</span>';
            }
        }
    }

    // Output attribute name / value pairs separate by a "<br>"
    echo '<div class="product-attributes">'.implode( '<br>', $attr_output 
    ).'</div>'; 
}

1 Ответ

0 голосов
/ 28 ноября 2018

Обновлено - Проблема возникает из следующей строки, где значение атрибута атрибута продукта всегда для одного и того же атрибута продукта:

$value = $product->get_attribute( 'pa_set' );

, и это должно быть вместо этого:

$value = $product->get_attribute( $taxonomy );

Полный пересмотренный код будет выглядеть так:

add_action('woocommerce_after_shop_loop_item','display_loop_product_attribute' );
function display_loop_product_attribute() {
    global $product;

    $product_attributes = array('pa_set', 'pa_team'); // Defined product attribute taxonomies.
    $attr_output = array(); // Initializing

    // Loop through the array of product attributes
    foreach( $product_attributes as $taxonomy ){
        if( taxonomy_exists($taxonomy) ){
            if( $value = $product->get_attribute($taxonomy) ){
            // The product attribute label name
            $label_name = get_taxonomy( $taxonomy )->labels->singular_name;
                // Storing attributes for output
                $attr_output[] = '<span class="'.$taxonomy.'">'.$label_name.': '.$value.'</span>';
            }
        }
    }
    // Output attribute name / value pairs separate by a "<br>"
    echo '<div class="product-attributes">'.implode('<br>', $attr_output).'</div>';
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.


Таргетинг Страницы архива категории продукта:

Вы будете использовать условный тег is_product_category() внутри функции наоператор IF

Для страниц архива определенной категории продуктов вы можете установить их , как описано здесь внутри функции в массиве, например:

if( is_product_category( array('chairs', 'beds') ) {
    // Here go the code to be displayed
}

Вам просто нужно установить нужные слагаемые категорий продуктов в массиве…


Связанные: Показать атрибуты продуктов WooCommerce в пользовательских архивах домашних и категорий продуктов

...