Ubicación de precios de WooCommerce en la base de datos

27 ene 2016, 08:56:27
Vistas: 35.4K
Votos: 13

Estoy buscando la ubicación de los precios de un producto según la opción que el usuario selecciona en el precio del producto. Por ejemplo, esta tienda WooCommerce tiene un selector cuyos precios cambian según la selección del usuario.

Quiero saber dónde se almacenan los precios de las diferentes opciones en la base de datos.

Gracias

1
Comentarios

Un producto es un custom post cuyo post_type es "product". En la base de datos debes buscar en la tabla posts donde el post_type sea product. Para cada post_id (ID del producto) puedes encontrar todos los datos relacionados con este producto en la tabla postmeta: SELECT * FROM 'postmeta' WHERE 'post_id' = nnnn (nnnn es el número ID de un producto). Todos los diferentes precios para cada producto se almacenan en la tabla "postmeta".

LoicTheAztec LoicTheAztec
3 abr 2016 00:46:24
Todas las respuestas a la pregunta 4
4
13

Todos los datos como los diferentes precios de un tipo de publicación personalizada de producto se almacenan (para cada producto) en la tabla postmeta.

Para encontrar el ID de publicación de todos los productos, debes usar esta consulta en la tabla posts:

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

Para cada ID de producto (post_id), puedes recuperar todos los datos relacionados con esta consulta en la tabla postmeta:

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

(nnnn es el número de ID (post_id) de un producto)

Obtendrás la lista de todas las propiedades del producto metakey y metavalues.
Para los meta_key relacionados con el precio que tienes, por ejemplo:
- _regular_price
- _sale_price
- _price
- …

Para obtener un valor particular de un meta_key de producto, puedes usar la función de WordPress:

get_post_meta($post_id, '$meta_key');

3 abr 2016 01:39:11
Comentarios

En Woocommerce, ¿cuál es la diferencia entre _regular_price y _price?

ptrcao ptrcao
22 ene 2019 22:23:08

@ptrcao "_price" es el precio activo (que puede ser el precio regular o el precio de oferta si está definido). "_regular_price" es el precio que ingresas en tu producto, bajo precio regular.

LoicTheAztec LoicTheAztec
22 ene 2019 22:26:06

Gracias - ¿y dónde/cómo se define el precio "activo"?

ptrcao ptrcao
22 ene 2019 22:30:08

@ptrcao Si el producto está en oferta (con un precio de oferta definido y activo), el precio activo "_price" es igual al precio de oferta (por lo tanto, diferente al precio regular). Si el producto no está en oferta, el precio activo "_price" es igual al precio regular.

LoicTheAztec LoicTheAztec
22 ene 2019 22:33:30
0

Como mencionó LoicTheAztec, los datos del producto residen en las tablas posts y postmeta. Aquí hay una consulta que utilicé para obtener los precios en mi entorno (con WC Role Based Price instalado)

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;

Quizás esto sea útil.

17 may 2017 13:35:58
1

Aquí hay tres meta_keys en la tabla postmeta.

[ _sale_price, _regular_price, _price ]

El primer array contiene el valor y el segundo array contiene la condición WHERE. Puedes añadir más condiciones.

Puedes actualizar los valores usando el siguiente código.

//actualizar _price
$wpdb->update( 
    $wpdb->postmeta, 
    array( 'meta_value' => $default_product_price ), 
    array( 'meta_key' => '_price' )
);
//actualizar _regular_price
$wpdb->update( 
    $wpdb->postmeta, 
    array( 'meta_value' => $default_product_price ), 
    array( 'meta_key' => '_regular_price' )
);
//actualizar _price
$wpdb->update( 
    $wpdb->postmeta, 
    array( 'meta_value' => $default_sale_price ), 
    array( 'meta_key' => '_sale_price' )
);
11 nov 2017 13:26:04
Comentarios

Las consultas están incompletas. Es esencial establecer en el segundo arreglo (cláusula WHERE) el post_id, de lo contrario, el mismo precio se establecerá para todas las publicaciones (asumimos productos).

Vincenzo Di Gaetano Vincenzo Di Gaetano
22 nov 2023 21:10:30
0

Esto imprime el título del producto y su precio.

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 ene 2019 19:27:38