Расположение цен WooCommerce в базе данных

27 янв. 2016 г., 08:56:27
Просмотры: 35.4K
Голосов: 13

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

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

Спасибо

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

Продукт — это произвольный тип записи, у которого post_type равен "product". В базе данных вам нужно искать в таблице posts записи с post_type равным product. Для каждого post_id (ID продукта) вы можете найти все связанные с этим продуктом данные в таблице postmeta: SELECT * FROM 'postmeta' WHERE 'post_id' = nnnn (nnnn — это числовой ID одного продукта). Все различные цены для каждого продукта хранятся в таблице "postmeta".

LoicTheAztec LoicTheAztec
3 апр. 2016 г. 00:46:24
Все ответы на вопрос 4
4
13

Все данные, такие как различные цены для пользовательского типа записи продукта, хранятся (для каждого продукта) в таблице postmeta.

Чтобы найти ID записи всех продуктов, необходимо выполнить следующий запрос к таблице posts:

SELECT * FROM 'posts' WHERE 'post_type' = 'product'

Для каждого ID продукта (post_id) можно получить все связанные данные с помощью этого запроса к таблице postmeta:

SELECT * FROM 'postmeta' WHERE 'post_id' = nnnn

(nnnn — это числовой идентификатор (post_id) продукта)

Вы получите список всех свойств продукта: metakey и metavalues.
Для связанных цен meta_key могут быть, например:
- _regular_price
- _sale_price
- _price
- …

Чтобы получить конкретное значение meta_key продукта, можно использовать функцию WordPress:

get_post_meta($post_id, '$meta_key');

3 апр. 2016 г. 01:39:11
Комментарии

В WooCommerce, в чем разница между _regular_price и _price?

ptrcao ptrcao
22 янв. 2019 г. 22:23:08

@ptrcao "_price" — это активная цена (которая может быть обычной ценой или ценой со скидкой, если она определена). "_regular_price" — это цена, которую вы вводите для своего товара в поле "Обычная цена".

LoicTheAztec LoicTheAztec
22 янв. 2019 г. 22:26:06

Спасибо. А где и как определяется "активная" цена?

ptrcao ptrcao
22 янв. 2019 г. 22:30:08

@ptrcao Если товар продается по акции (с установленной и активной акционной ценой), активная цена "_price" равна акционной цене (и, соответственно, отличается от обычной цены). Если товар не участвует в акции, активная цена "_price" равна обычной цене.

LoicTheAztec LoicTheAztec
22 янв. 2019 г. 22:33:30
0

Как сказал LoicTheAztec, данные о продуктах хранятся в таблицах posts и postmeta. Вот запрос, который я использовал для получения цен в моей среде (с установленным плагином WC Role Based Price)

SELECT
  wpp.ID,
  wppm.meta_key AS FIELD,
  wppm.meta_value AS VALUE,
  wppm.*
FROM wp_posts AS wpp
  LEFT JOIN wp_postmeta AS wppm
    ON wpp.ID = wppm.post_id
WHERE wpp.post_type = 'product'
      AND (wppm.meta_key = '_regular_price'
      OR wppm.meta_key = '_sale_price'
      OR wppm.meta_key = '_price'    
      OR wppm.meta_key = '_product_attributes')
ORDER BY wpp.ID ASC, FIELD ASC, wppm.meta_id DESC;

Возможно, это будет полезно.

17 мая 2017 г. 13:35:58
1

В таблице postmeta есть три meta_key:

[ _sale_price, _regular_price, _price ]

Первый массив содержит значения, а второй массив содержит условие WHERE. Вы можете добавить больше условий.

Вы можете обновить значения с помощью следующего кода:

//обновление _price
$wpdb->update( 
    $wpdb->postmeta, 
    array( 'meta_value' => $default_product_price ), 
    array( 'meta_key' => '_price' )
);
//обновление _regular_price
$wpdb->update( 
    $wpdb->postmeta, 
    array( 'meta_value' => $default_product_price ), 
    array( 'meta_key' => '_regular_price' )
);
//обновление _price
$wpdb->update( 
    $wpdb->postmeta, 
    array( 'meta_value' => $default_sale_price ), 
    array( 'meta_key' => '_sale_price' )
);
11 нояб. 2017 г. 13:26:04
Комментарии

Запросы неполные. Важно указать во втором массиве (условие WHERE) post_id, иначе одна и та же цена будет установлена для всех записей (предположительно товаров).

Vincenzo Di Gaetano Vincenzo Di Gaetano
22 нояб. 2023 г. 21:10:30
0

Этот код выводит название товара и его цену.

SELECT distinct p.id, p.post_title, pm.meta_key, pm.meta_value 
FROM {db_prefix}_postmeta pm 
INNER JOIN {db_prefix}_posts p ON p.id = pm.post_id
WHERE pm.meta_key = '_sale_price'
11 янв. 2019 г. 19:27:38