Получение пользовательских атрибутов продукта для их отображения в цикле продуктов WooCommerce

#php #wordpress #woocommerce #attributes #product

#php #wordpress #woocommerce #атрибуты #продукт

Вопрос:

Я работаю на сайте woocommerce (недвижимость), и я не могу показывать пользовательские атрибуты продукта на своей странице в магазине (например. Квадратные метры, комнаты, туалеты и т. Д.). Я пытаюсь использовать приведенный ниже код, но я могу заставить его работать. С помощью имеющегося у меня кода я могу просто показывать идентификатор продукта, но когда дело доходит до атрибутов, он показывает только слово «Массив» или просто «Ничего», когда я помещаю идентификаторы атрибутов в код.

Это код, который у меня есть:

 add_action('woocommerce_after_shop_loop_item_title', 'cstm_display_product_category', 5);

function cstm_display_product_category()
{
    global $product;

    $productAttribute = $product->get_id();

   //if(isset($productAttribute)){
       echo '<div class="items" style="color: #fff;"><p>Output: ' . $productAttribute . '</p></div>';
   //}
}
  

Вы можете увидеть результат в реальном времени здесь

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

P.D. Я вставляю этот код в свой functions.php досье.

WordPress обновлен. Woocommerce обновлен.

Ответ №1:

Обновление 3

С атрибутами продукта (пользовательскими или нет) вы можете использовать WC_Product метод get_attribute() , в котором вы можете ввести имя атрибута, слаг или таксономию. Итак, в вашем коде:

 add_action('woocommerce_after_shop_loop_item_title', 'display_custom_product_attributes_on_loop', 5 );
function display_custom_product_attributes_on_loop() {
    global $product;

    $value1 = $product->get_attribute('Square meters');
    $value2 = $product->get_attribute('Rooms');
    $value3 = $product->get_attribute('Toilets');

    if ( ! empty($value1) || ! empty($value2) || ! empty($value3) ) {

        echo '<div class="items" style="color: red;"><p>';

        $attributes = array(); // Initializing

        if ( ! empty($value1) ) {
            $attributes[] = __("Square meters:") . ' ' . $value1;
        }

        if ( ! empty($value2) ) {
            $attributes[] = __("Rooms:") . ' ' . $value2;
        }

        if ( ! empty($value3) ) {
            $attributes[] = __("Toilets:") . ' ' . $value3;
        }

        echo implode( '<br>', $attributes ) . '</p></div>';
    }
}
  

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


Автоматизируйте код из простого массива имен атрибутов продукта:

Приведенный ниже код даст тот же результат, но он сжат, оптимизирован и требует только массива желаемых атрибутов продукта:

 add_action('woocommerce_after_shop_loop_item_title', 'display_custom_product_attributes_on_loop', 5 );
function display_custom_product_attributes_on_loop() {
    global $product;

    // Settings: Here below set your product attribute label names
    $attributes_names = array('Square meters', 'Rooms', 'Toilets');

    $attributes_data  = array(); // Initializing

    // Loop through product attribute settings array
    foreach ( $attributes_names as $attribute_name ) {
        if ( $value = $product->get_attribute($attribute_name) ) {
            $attributes_data[] = $attribute_name . ': ' . $value;
        }
    }

    if ( ! empty($attributes_data) ) {
        echo '<div class="items" style="color: red;"><p>' . implode( '<br>', $attributes_data ) . '</p></div>';
    }
}
  

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

Комментарии:

1. Здесь отображаются все пользовательские атрибуты, кроме квадратных метров, но я думаю, что это как-то связано с моей таксономией. Я собираюсь проверить и посмотреть, что происходит. Спасибо за помощь. Я очень благодарен.

2. Огромное спасибо за этот ответ, я пытался показать бренд с нескольких часов. Ваш код сотворил волшебство.