Woocommerce: ottenere l'ID del prodotto dal codice SKU della variazione

26 mar 2018, 10:05:08
Visualizzazioni: 25.2K
Voti: 1

Sto creando un negozio online che importa molti prodotti da un file csv. Ho bisogno di collegare gli accessori disponibili ecc., che vengono determinati e importati individualmente tramite il codice SKU dei rispettivi prodotti.

So che è possibile ottenere l'ID del prodotto con un semplice SKU del prodotto in questo modo:

wc_get_product_id_by_sku('PRODUCT_SKU');

C'è un modo per fare lo stesso, ma con lo SKU di una variazione?

0
Tutte le risposte alla domanda 2
2

MODIFICA: Sembra che ora tu possa utilizzare wc_get_product_id_by_sku() per recuperare una product_variation senza problemi, vedi l'altra risposta qui sotto.

Mi sono bloccato su un problema molto simile. Non ho trovato nulla nel codice di woocommerce che ti permetta di cercare direttamente il prodotto genitore dallo SKU della variazione. Tuttavia, poiché le variazioni di prodotto sono memorizzate nella tabella wp_posts con il tipo product_variation, e gli SKU sono memorizzati nella tabella wp_post_meta, è facile cercare la variazione di prodotto utilizzando una meta query con la funzione wordpress get_posts().

$args = array(
    'post_type'  => 'product_variation',
    'meta_query' => array(
        array(
            'key'   => '_sku',
            'value' => 'PRODUCT_SKU',
        )
    )
);
$posts = get_posts( $args);

Questo dovrebbe restituire il tuo custom post type product_variation corrispondente.

Una volta ottenuto questo, puoi cercare il prodotto genitore utilizzando la colonna post_parent che WooCommerce utilizza per collegare una variazione al prodotto variabile genitore.

Trasformare questo in una funzione è abbastanza semplice:

function wc_get_product_id_by_variation_sku($sku) {
    $args = array(
        'post_type'  => 'product_variation',
        'meta_query' => array(
            array(
                'key'   => '_sku',
                'value' => $sku,
            )
        )
    );
    // Ottieni i post per lo sku
    $posts = get_posts( $args);
    if ($posts) {
        return $posts[0]->post_parent;
    } else {
        return false;
    }
}

Utilizzo questa funzione nel mio sito e funziona alla grande. Spero che sia d'aiuto.

12 giu 2018 13:20:28
Commenti

Grazie. Forse è meglio non chiamarla così, nel caso in cui WC introduca una funzione con lo stesso nome ;)

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

Signore, leggere 'product_variation' ha risolto quello su cui stavo lavorando stanotte. Se fossimo nella stessa stanza, ti dovrei da bere. GRAZIE!

Dadou Dadou
7 dic 2021 04:49:53
3

Il modo più semplice è ottenere l'ID della variante utilizzando la funzione wc_get_product_id_by_sku e poi ottenere l'ID del genitore per avere l'ID del Prodotto.

$variation_id = wc_get_product_id_by_sku('VARIATION_SKU');
$product_id = wp_get_post_parent_id($variation_id);
17 mag 2020 15:28:57
Commenti

Questo codice non funziona perché cerca lo sku nel post type "products". Puoi vedere l'implementazione qui: http://hookr.io/functions/wc_get_product_id_by_sku/

Le variazioni sono memorizzate come post type "product_variation", quindi serve una funzione personalizzata per trovare un prodotto con uno sku di variazione.

Tim Tim
22 lug 2021 11:42:31

Queste sono le funzioni predefinite di WooCommerce e funzionano bene per me. wc_get_product_id_by_sku restituisce l'ID del prodotto che ovviamente è di tipo "product_variation", ma poi viene usato wp_get_post_parent_id per ottenere il prodotto genitore che sarà di tipo "products". Spero che questo chiarisca il tuo punto.

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

Hai ragione Abhijit, sembra funzionare bene ora. Forse quando ho scritto la risposta nel 2018 l'API era leggermente diversa. Sono sicuro che wc_get_product_id_by_sku non funzionasse per me allora. Il link hookr.io nel mio ultimo commento sembra non funzionare più, quindi non posso verificare. Modificherò la mia risposta originale e rimanderò alla tua risposta.

Tim Tim
4 dic 2023 15:14:40