Woocommerce: obține ID-ul produsului din SKU-ul variației

26 mar. 2018, 10:05:08
Vizualizări: 25.2K
Voturi: 1

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?

0
Toate răspunsurile la întrebare 2
2

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ă.

12 iun. 2018 13:20:28
Comentarii

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 ;)

Andrew Schultz Andrew Schultz
10 nov. 2020 05:40:38

Domnule, citirea 'product_variation' a rezolvat problema la care am lucrat în seara asta. Dacă am fi în aceeași cameră, ți-aș fi dator o băutură. MULȚUMESC!

Dadou Dadou
7 dec. 2021 04:49:53
3

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);
17 mai 2020 15:28:57
Comentarii

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.

Tim Tim
22 iul. 2021 11:42:31

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.

Abhijit Goswami Abhijit Goswami
30 nov. 2023 08:23:02

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.

Tim Tim
4 dec. 2023 15:14:40