Показывать атрибуты продуктов WooCommerce в пользовательских архивах для дома и категории продуктов - PullRequest
2 голосов
/ 12 марта 2019

Приведенный ниже код, который отображает атрибуты продукта на страницах архивов категорий продуктов и основан на " Отображение атрибутов продуктов на определенной странице архивов категорий продуктов Woocommerce " ветка ответа.

Однако, когда я добавляю эту категорию на домашнюю страницу, атрибуты не отображаются.

Моя версия кода:

// Show Attributes on Product Category Page 
add_action('woocommerce_after_shop_loop_item','display_loop_product_attribute' );
function display_loop_product_attribute() {
    global $product;

    //$product_attributes = array('pa_size', 'pa_color');
    $product_attributes = array('pa_size');
    $attr_output = array();

    // 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-custom">'.implode('<br>', $attr_output).'</div>';
}

Я не могу понять, как заставить это работать на моей пользовательской домашней странице, которая отображает продукты и на страницах определенных категорий продуктов. Для домашней страницы я знаю, что условный тег будет использоваться is_home()… Но как я могу заставить его работать и на страницах категорий продуктов?

1 Ответ

0 голосов
/ 13 марта 2019

Обновлено - следующий код будет отображать определенные атрибуты продукта на:

  • Домашняя страница для пользовательского цикла товаров с использованием is_front_page() Условный тег WordPress
  • Определено Страницы архива категории продукта с использованием is_product_category() Условный тег Woocommerce

код:

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

    // The Product attribute to be displayed
    $product_attributes = array('pa_size');

    // The targeted Product category archive pages (slugs)
    $categories = array('t-shirts', 'hoodies', 'socks');

    $output = array(); // Initializing

    // Targetting home page and specific product category archive pages
    if( is_front_page() || is_product_category($categories) ) {

        // Loop through the array of product attributes
        foreach( $product_attributes as $taxonomy ){
            if( taxonomy_exists($taxonomy) ){
                if( $values = $product->get_attribute($taxonomy) ){
                    // The product attribute label name
                    $label_name = get_taxonomy($taxonomy)->labels->singular_name;

                    // Storing attributes for output
                    $output[] = '<span class="'.$taxonomy.'">'.$label_name.': '.$values.'</span>';
                }
            }
        }

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

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


Добавление: Чтобы отформатировать имя каждого атрибута в отдельном теге <span>

Вставьте в код функции, после этой строки:

                    // The product attribute label name
                    $label_name = get_taxonomy($taxonomy)->labels->singular_name; 

Следующее:

                    // convert string of term names to an array
                    $values = explode(', ', $values);
                    // Format each and set back to a string
                    $values = '<span>' . implode('</span> <span>', $values) . '</span>';

Related: Отображение атрибутов продукта на странице архивов отдельных категорий продуктов Woocommerce

...