Woocommerce: obține ID-ul produsului din SKU-ul variației
Creez un magazin online care importă multe produse dintr-un fișier CSV. Trebuie să fac legături către accesoriile disponibile etc., care sunt determinate și importate individual prin SKU-ul produselor respective.
Știu că este posibil să obțin ID-ul produsului cu un SKU simplu al produselor astfel:
wc_get_product_id_by_sku('PRODUCT_SKU');
Există vreo modalitate de a face același lucru, dar cu un SKU al variației?

EDIT: Se pare că acum poți folosi wc_get_product_id_by_sku() pentru a obține un product_variation fără probleme, vezi celălalt răspuns de mai jos.
Am avut o problemă foarte asemănătoare. Nu am găsit nimic în codul woocommerce care să permită căutarea directă a produsului părinte din SKU-ul variației.
Însă, deoarece variațiile de produse sunt stocate în tabelul wp_posts
cu tipul product_variation
, iar SKU-urile sunt stocate în tabelul wp_post_meta
, este ușor să găsești variația produsului folosind o interogare meta cu funcția WordPress get_posts()
.
$args = array(
'post_type' => 'product_variation',
'meta_query' => array(
array(
'key' => '_sku',
'value' => 'PRODUCT_SKU',
)
)
);
$posts = get_posts( $args);
Aceasta ar trebui să returneze tipul de postare personalizat product_variation
care se potrivește.
Odată ce ai acest lucru, poți căuta produsul părinte folosind coloana post_parent
pe care WooCommerce o folosește pentru a lega o variație de produsul variabil părinte.
Transformarea acestui lucru într-o funcție este destul de simplă:
function wc_get_product_id_by_variation_sku($sku) {
$args = array(
'post_type' => 'product_variation',
'meta_query' => array(
array(
'key' => '_sku',
'value' => $sku,
)
)
);
// Obține postările pentru SKU
$posts = get_posts( $args);
if ($posts) {
return $posts[0]->post_parent;
} else {
return false;
}
}
Folosesc această funcție pe site-ul meu și funcționează perfect. Sper că te ajută.

Mulțumesc. Poate ar fi bine să nu o denumești așa cum ai făcut, în caz că WC va scrie eventual o funcție cu același nume ;)

Cea mai simplă metodă este obținerea ID-ului de variație folosind funcția wc_get_product_id_by_sku
, apoi obținerea ID-ului părinte pentru a obține ID-ul de produs.
$variation_id = wc_get_product_id_by_sku('VARIATION_SKU');
$product_id = wp_get_post_parent_id($variation_id);

Acest cod nu funcționează pentru că caută SKU-ul pe tipul de post "products". Puteți vedea implementarea aici: http://hookr.io/functions/wc_get_product_id_by_sku/
Variațiile sunt stocate ca tip de post "product_variation", deci este nevoie de o funcție personalizată pentru a găsi un produs cu un SKU de variație.

Acestea sunt funcțiile implicite WooCommerce și funcționează corect pentru mine. wc_get_product_id_by_sku
returnează ID-ul produsului care evident este de tipul "product_variation", dar apoi se folosește wp_get_post_parent_id
pentru a obține produsul părinte care va fi de tipul "products". Sper că asta clarifică punctul tău.

Ai dreptate Abhijit, acum pare să funcționeze corect. Poate când am scris răspunsul în 2018 API-ul era ușor diferit. Sunt sigur că atunci wc_get_product_id_by_sku
nu a funcționat pentru mine. Link-ul către hookr.io din comentariul meu anterior nu mai funcționează nici el, așa că nu pot verifica. Voi edita răspunsul meu original și voi indica spre răspunsul tău.
