#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. Огромное спасибо за этот ответ, я пытался показать бренд с нескольких часов. Ваш код сотворил волшебство.