2014-05-16 19 views
6

Pracuję na oddzielnej stronie szablonów, która strona dostaje wookommece produktu sku za pomocą niestandardowego pola z postu. potrzebuję uzyskać identyfikator produktu tego sku do tworzenia obiektu woocommece i robić dalsze rzeczy, oto mój kod.Woocommerce uzyskać identyfikator produktu za pomocą produktu SKU

global $woocommerce; 
//this return sku (custom field on a wordpress post) 
$sku=get_field("product_sku"); 
if($sku!=''){ 
    //need to create object, but using sku cannot create a object, 
    $product = new WC_Product($sku); 
    echo $product->get_price_html(); 
} 

czy istnieje sposób, aby uzyskać identyfikator produktu przed utworzeniem obiektu, to mogę przekazać identyfikator produktu do WC_Product konstruktora klasy i stworzyć object.thank Ci

+0

który produkt identyfikatora? –

+0

$ sku = get_field ("product_sku"); zwróć sku produktu woocommerce z pola niestandardowego wordpress, potrzebuję uzyskać identyfikator produktu tego sku –

Odpowiedz

9

Można użyć tej funkcji (found here). Google to twój przyjaciel!

function get_product_by_sku($sku) { 

    global $wpdb; 

    $product_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku)); 

    if ($product_id) return new WC_Product($product_id); 

    return null; 
} 
26

woocommerce 2,3 wreszcie dodaje wsparcie dla tego w rdzeniu.

Jeśli używasz tej wersji, możesz zadzwonić

wc_get_product_id_by_sku($sku) 
0

woocommerce produkt jest szczególnym rodzajem postu. Z tego powodu można użyć produktu WP_Query, aby znaleźć produkt według kodu SKU i innych parametrów. Może to być wykorzystane jako alternatywa, gdy musisz ograniczyć wyszukiwanie według kilku innych kryteriów.

Na przykład możesz chcieć określić język, jeśli używasz Polylang (lub innych wtyczek) do tłumaczenia witryny. Możesz też ograniczyć wyszukiwanie według typu produktu.

Wykonują bezpośrednie zapytanie SQL w metodzie WooCommerce get_product_id_by_sku, co moim zdaniem w wielu przypadkach jest doskonale w porządku. Ale może nie działać, jeśli użyjesz tłumaczeń, zwróci losowy produkt, ale nie ten, który jest w bieżącym języku.

przykład kod znaleźć produkt SKU pomocą WP_Query (z ograniczeniem od rodzaju produktu i języka):

public function find(string $lang, string $sku) { 
    $query = [ 
     'lang'  => $lang, 
     'post_type' => 'product', 
     'meta_query' => [ 
      [ 
       'key'  => '_sku', 
       'value' => $sku, 
       'compare' => '=' 
      ] 
     ], 
     'tax_query' => [ 
      [ 
       'taxonomy' => 'product_type', 
       'terms' => [ 'grouped' ], 
       'field' => 'name', 
      ] 
     ] 
    ]; 
    $posts = (new WP_Query())->query($query); 

    return count($posts) > 0 ? $posts[0] : null; 
}