Locația prețurilor WooCommerce în baza de date

27 ian. 2016, 08:56:27
Vizualizări: 35.4K
Voturi: 13

Caut locația prețurilor unui produs în funcție de opțiunea pe care utilizatorul o selectează în prețul produsului. De exemplu, acest magazin WooCommerce are un selector în care prețurile se modifică în funcție de selecția utilizatorului.

Vreau să știu unde sunt stocate prețurile pentru diferitele opțiuni în baza de date.

Mulțumesc

1
Comentarii

Un produs este un post personalizat al cărui post_type este "product". În baza de date trebuie să căutați în tabelul posts unde post_type este product. Pentru fiecare post_id (ID-ul produsului) puteți găsi toate datele asociate acestui produs în tabelul postmeta: SELECT * FROM 'postmeta' WHERE 'post_id' = nnnn (nnnn este numărul ID al unui produs). Toate prețurile diferite pentru fiecare produs sunt stocate în tabelul "postmeta".

LoicTheAztec LoicTheAztec
3 apr. 2016 00:46:24
Toate răspunsurile la întrebare 4
4
13

Toate datele, cum ar fi diferitele prețuri ale unui tip de postare personalizat pentru produse sunt stocate (pentru fiecare produs) în tabelul postmeta.

Pentru a găsi ID-ul postării pentru toate produsele, trebuie să utilizați această interogare în tabelul posts:

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

Pentru fiecare ID de produs (post_id), puteți prelua toate datele asociate cu această interogare în tabelul postmeta:

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

(nnnn reprezintă numărul ID (post_id) al unui produs)

Veți obține lista tuturor proprietăților produsului metakey și metavalues.
Pentru cheile meta (meta_key) legate de preț, aveți, de exemplu:
- _regular_price
- _sale_price
- _price
- …

Pentru a obține o valoare specifică a unei chei meta a unui produs, puteți utiliza funcția WordPress:

get_post_meta($post_id, '$meta_key');

3 apr. 2016 01:39:11
Comentarii

În WooCommerce, care este diferența dintre _regular_price și _price?

ptrcao ptrcao
22 ian. 2019 22:23:08

@ptrcao "_price" este prețul activ (care poate fi prețul obișnuit sau prețul redus dacă este definit). "_regular_price" este prețul pe care îl introduceți în produs, sub prețul obișnuit.

LoicTheAztec LoicTheAztec
22 ian. 2019 22:26:06

Mulțumesc - și unde/cum se definește prețul "activ"?

ptrcao ptrcao
22 ian. 2019 22:30:08

@ptrcao Dacă produsul este la reducere (cu un preț de vânzare definit și activ), prețul activ "_price" este egal cu prețul de vânzare (deci diferit de prețul obișnuit). Dacă produsul nu este la reducere, prețul activ "_price" este egal cu prețul obișnuit.

LoicTheAztec LoicTheAztec
22 ian. 2019 22:33:30
0

După cum a menționat LoicTheAztec, datele despre produse sunt stocate în tabelele posts și postmeta. Iată o interogare pe care am folosit-o pentru a obține prețurile în mediul meu (cu WC Role Based Price instalat):

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;

Poate această informație vă este utilă.

17 mai 2017 13:35:58
1

Aici sunt trei meta_keys în tabelul postmeta.

[ _sale_price, _regular_price, _price ]

Primul array conține valoarea, iar al doilea array conține condiția WHERE. Puteți adăuga mai multe condiții.

Puteți actualiza valorile folosind următorul cod.

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

Interogările sunt incomplete. Este esențial să setați în al doilea array (clauza WHERE) post_id, altfel același preț va fi setat pentru toate articolele (presupunem produse).

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

Aceasta afișează titlul produsului și prețul acestuia.

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