Как Woocommerce хранит атрибуты вариаций и как их можно получить для каждой вариации?

13 сент. 2013 г., 01:51:56
Просмотры: 26K
Голосов: 9

Я пытаюсь получить список вариаций товаров из установленного Woocommerce с их атрибутами - что-то вроде этого:

id товара  id вариации    название  цвет   размер
5          1234           купальник  синий  10
5          1235           купальник  синий  12
5          1236           купальник  синий  14
5          1237           купальник  красный 10

Я могу получить ID вариации, ID товара и название товара следующим образом:

<?php
// Получаем вариации
$args = array( 'post_type' => 'product_variation');
$variationloop = new WP_Query( $args );
while ( $variationloop->have_posts() ) : $variationloop->the_post();
// получаем родителя для каждой вариации
$parent = get_post($post->post_parent); 
// проверяем, опубликован ли родительский товар
if ($parent->post_status=="publish")
{
$parentid=$post->post_parent;
 echo $parentid;  // товар
 echo $id; // id вариации
 echo $parent->post_title;  // название товара
}
?>

Однако я не могу понять, как Woocommerce связывает вариацию с атрибутом, например, с размером. Если я делаю так:

$sizes = get_the_terms($parentid ,'pa_size');
foreach ( $sizes as $size ) {
   echo $size->name;
}

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

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

Что насчёт $attr = get_post_meta($id, '_product_attributes', true); echo '<pre>'; print_r($attr); echo '</pre>'; ?

gmazzap gmazzap
13 сент. 2013 г. 04:51:16

Уважаемый G.M., прошу прощения за то, что заставил вас читать всё это: я только что осознал, что являюсь мировым чемпионом по глупости и запускал свой код на тестовом сайте, но смотрел данные в рабочей базе MySQL. Поэтому идентификаторы не совпадали. Мне очень жаль. Вы на 100% правы - get_post_meta является решением моих проблем, мне просто нужно было смотреть в правильную чёртову базу данных!

Victoria Victoria
13 сент. 2013 г. 11:02:04

Дорогая Виктория, вы заставляете меня улыбаться :)

gmazzap gmazzap
13 сент. 2013 г. 12:00:12

Должен сказать, что такая позиция stackexchange, будто WooCommerce не в тему, просто отвратительна. Это платформа, которую использует множество людей, работающих с WordPress. Вопрос абсолютно релевантен.

Dave Hilditch Dave Hilditch
26 июн. 2015 г. 17:23:53
Все ответы на вопрос 1
1

Атрибуты хранятся в таблице wp_term_relationships.

Пример:

+--------------+-------------------+-------------------+
| object_id    | term_taxonomy_id  | term_taxonomy_id  |
+--------------+-------------------+-------------------+
| 91           | 48                | 0                 |
+--------------+-------------------+-------------------+

Товар с ID 91 имеет атрибут с ID 48

20 сент. 2013 г. 23:57:02
Комментарии

Они также хранятся в виде JSON-строки в таблице wp_postmeta по ключу _product_attributes. Предположительно, они дублируются по соображениям производительности.

Dave Hilditch Dave Hilditch
26 июн. 2015 г. 17:24:41