Woocommerce: ottenere l'ID del prodotto dal codice SKU della variazione
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?

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.

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

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

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.

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.

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.
