Woocommerce使用产品SKU获得产品ID

时间:2014-05-16 04:16:05

标签: php mysql wordpress woocommerce custom-fields

我正在开发一个单独的模板页面,该页面使用wordpress post的自定义字段获取woocommece产品sku。我需要获得那个sku的产品ID来创建woocommece对象并做更多的事情,这是我的代码。

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,然后我可以将产品ID传递给WC_Product类构造函数并创建object.thank you

3 个答案:

答案 0 :(得分:36)

WooCommerce 2.3 最终在核心中添加了对此的支持。

如果您使用的是此版本,可以致电

wc_get_product_id_by_sku( $sku )

答案 1 :(得分:11)

您可以使用此功能(found here)。谷歌是你的朋友!

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

答案 2 :(得分:1)

WooCommerce产品是一种特殊的帖子类型。因此WP_Query可能会用于通过SKU和其他参数查找产品。当您需要通过其他一些标准限制搜索时,可以使用此选项。

例如,如果您使用Polylang(或其他插件)进行网站翻译,则可能需要指定语言。或者您可以按产品类型限制搜索。

他们在WooCommerce方法get_product_id_by_sku中进行直接SQL查询,我认为在很多情况下这种方法完全正常。但是如果您使用翻译可能不起作用,它将返回随机产品,但不会返回当前语言的产品。

SKU使用WP_Query查找产品的示例代码(受产品类型和语言限制):

indexName := "someindex"
typeName  := "sometype"
index1Req := NewBulkIndexRequest().Index(indexName).Type(typeName).Id("existing_id").Doc({...})
index2Req := NewBulkIndexRequest().Index(indexName).Type(typeName).Id("existing_id2").Doc({...})

bulkRequest := client.Bulk()
bulkRequest = bulkRequest.Add(index1Req)
bulkRequest = bulkRequest.Add(index2Req)

bulkResponse, err := bulkRequest.Do(context.TODO())
if err != nil {
    t.Fatal(err)
}
...