2014-05-16 32 views
6

Ayrı bir şablon sayfası üzerinde çalışıyorum, hangi sayfa woocommece ürün sku özel alan wordpress yazısı kullanarak alır. woocommece nesnesini yaratmak için sku'nun ürün kimliğini almam ve başka şeyler yapmam gerekiyor, işte benim kodum. Woocommerce Ürününüzü kullanın Ürün kimliğini kullanarak 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(); 
} 

önce nesne oluşturmak ürün kimliği almak için yolu yoktur, o zaman ben WC_Product sınıf yapıcısı ürün kimliği geçmek ve size

+0

ürün id:

Örnek kodu (ürün türüne ve dile göre kısıtlama) WP_Query kullanılarak SKU ürünü bulmak için? –

+0

$ sku = get_field ("product_sku"); woocommerce ürününün bir sku'yu wordpress özel alanından döndürün, o sku'nun ürün kimliğini almam gerekiyor –

cevap

9

Bu işlevi (found here) kullanabilir object.thank oluşturabilir. Google Senin Arkadaşın!

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 son olarak çekirdek bunun için destek sağlar. Bu sürümü kullanıyorsanız

, Arayabileceğin

wc_get_product_id_by_sku($sku) 
0

WooCommerce ürünü özel mesaj türüdür. Bu nedenle, SKU ve diğer parametrelere göre ürün bulmak için bu WP_Query kullanılabilir. Aramanızı başka kriterler ile kısıtlamanız gerektiğinde bu seçenek bir alternatif olarak kullanılabilir.

Örneğin site çeviriler için Polylang (ya da diğer eklentileri) kullanırsanız dili belirtmek isteyebilirsiniz. Veya ürünü ürün türüne göre kısıtlayabilirsiniz.

Onlar birçok durumda tamamen normal olduğunu düşünüyorum WooCommerce yönteminde get_product_id_by_sku doğrudan SQL sorgusu yapmak. Ancak çevirileri kullanırsanız çalışmayabilir, rastgele ürünü döndürür, ancak mevcut dilde değil.

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; 
} 
İlgili konular