Woocommerce 使用产品 SKU 获取产品 ID

Posted

技术标签:

【中文标题】Woocommerce 使用产品 SKU 获取产品 ID【英文标题】:Woocommerce get Product id using product SKU 【发布时间】:2014-07-04 17:52:42 【问题描述】:

我正在开发一个单独的模板页面,该页面使用 wordpress 帖子的自定义字段获取 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类构造函数并创建对象。谢谢

【问题讨论】:

$sku=get_field("product_sku");从 wordpress 自定义字段返回 woocommerce 产品的 sku,我需要获取该 sku 的产品 id 【参考方案1】:

WooCommerce 产品是一种特殊的帖子类型。因此,WP_Query 可用于按 SKU 和其他参数查找产品。当您需要通过一些其他条件限制搜索时,这可以用作替代方法。

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

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

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

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;

【讨论】:

在那个例子中你不需要 tax_query,我不太明白你试图通过它实现什么。【参考方案2】:

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

如果你使用的是这个版本,可以调用

wc_get_product_id_by_sku( $sku )

【讨论】:

加法:这会得到$product = new WC_Product(wc_get_product_id_by_sku($sku));【参考方案3】:

您可以使用此功能 (found here)。 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;

【讨论】:

以上是关于Woocommerce 使用产品 SKU 获取产品 ID的主要内容,如果未能解决你的问题,请参考以下文章

sql 获取WooCommerce按产品/邮政ID或产品SKU获取订单ID

如何从 Woocommerce 中的订单项中获取产品 sku [重复]

在 WooCommerce 中获取并显示选定的变体 SKU

在发布产品之前,在 Woocommerce 中强制 SKU

在WooCommerce产品选项编辑页面中,在SKU之前显示自定义字段

Woocommerce 在购物车和结账时使用自定义值覆盖产品价格