2014-05-16 4 views
6

나는 별도의 템플릿 페이지에서 작업하고 있습니다.이 페이지는 워드 프레스 게시물의 사용자 정의 필드를 사용하여 woocommece product sku를 가져옵니다. 나는 woocommece 객체를 생성하기 위해 그 sku의 제품 ID를 얻고 더 많은 일을 할 필요가있다. 여기 나의 코드가있다. Woocommerce 제품 SKU를 사용하는 제품 ID 얻기

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

전에 개체를 만드는 제품 ID를 얻는 방법이, 그럼 내가 WC_Product 클래스 생성자에 제품 ID를 전달하고 당신에게

+0

제품의 ID :

예제 코드 (제품 유형 및 언어에 의해 제한) WP_Query을 사용 SKU에 의해 제품을 찾는 방법은? –

+0

$ sku = get_field ("product_sku"); wordpress 사용자 정의 필드에서 woocommerce 제품의 sku를 반환, 그 sku의 제품 ID를 얻을 필요가 –

답변

9

이 기능 (found here)를 사용할 수 있습니다를 object.thank 만들 수 있습니다. Google은 귀하의 친구입니다!

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 결국 핵심이에 대한 지원을 추가합니다. 이 버전을 사용하는 경우

, 당신이 호출 할 수 있습니다

wc_get_product_id_by_sku($sku) 
0

WooCommerce 제품은 특별한 포스트 유형입니다. 이 때문에 WP_Query은 SKU 및 기타 매개 변수로 제품을 찾는 데 사용될 수 있습니다. 이것은 다른 기준으로 검색을 제한해야 할 때 대안으로 사용할 수 있습니다.

예를 들어 사이트 번역에 Polylang (또는 다른 플러그인)을 사용하는 경우 언어를 지정할 수 있습니다. 또는 제품 유형별로 검색을 제한 할 수 있습니다.

그들은 많은 경우 완벽하게 괜찮다고 생각하는 WooCommerce 메서드 get_product_id_by_sku에서 직접 SQL 쿼리를 수행합니다. 번역을 사용하면 작동하지 않을 수도 있지만 현재 언어로 된 제품이 아닌 임의의 제품을 반환합니다.

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