2014-05-16 44 views
6

Tôi đang làm việc trên một trang mẫu riêng biệt, trang nào nhận được sku sản phẩm độc đáo bằng cách sử dụng trường tùy chỉnh của bài đăng wordpress. tôi cần phải có được id sản phẩm của sku đó để tạo đối tượng woocommece và làm những việc khác, đây là mã của tôi.Woocommerce lấy Id sản phẩm bằng SKU sản phẩm

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

là có cách để có được id sản phẩm trước khi tạo đối tượng, sau đó tôi có thể vượt qua id sản phẩm để WC_Product constructor lớp và tạo object.thank bạn

+0

mà sản phẩm của id? –

+0

$ sku = get_field ("product_sku"); trả lại một sku sản phẩm woocommerce từ trường tùy chỉnh wordpress, tôi cần lấy id sản phẩm của sku đó –

Trả lời

9

Bạn có thể sử dụng chức năng này (found here). Google là bạn của bạ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 cuối cùng cũng thêm hỗ trợ cho điều này.

Nếu bạn đang sử dụng phiên bản này, bạn có thể gọi

wc_get_product_id_by_sku($sku) 
0

WooCommerce sản phẩm là một bài kiểu đặc biệt. Vì điều này WP_Query có thể được sử dụng để tìm kiếm sản phẩm theo SKU và các thông số khác. Điều này có thể được sử dụng để thay thế khi bạn cần giới hạn tìm kiếm của mình theo một số tiêu chí khác.

Ví dụ: bạn có thể muốn chỉ định ngôn ngữ nếu bạn sử dụng Polylang (hoặc các plugin khác) cho bản dịch trang web. Hoặc bạn có thể giới hạn tìm kiếm theo loại sản phẩm.

Họ thực hiện truy vấn SQL trực tiếp theo phương pháp WooCommerce get_product_id_by_sku mà tôi nghĩ là hoàn toàn tốt trong nhiều trường hợp. Nhưng có thể không hoạt động nếu bạn sử dụng bản dịch, nó sẽ trả về sản phẩm ngẫu nhiên nhưng không trả về sản phẩm bằng ngôn ngữ hiện tại. đang

Ví dụ để tìm sản phẩm bằng cách sử dụng SKU WP_Query (với hạn chế theo loại sản phẩm và ngôn ngữ):

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; 
} 
Các vấn đề liên quan