-1

我正在尝试从 woocommerce 中的可变产品中获取一系列 skus。每个变体都有自己的 sku,我还为包含所有变体的产品设置了一个整体 sku(在库存选项卡中)

因此,对于简单的产品,此代码有效:

global $product;
$product_sku = $product->get_sku();

但是,当我使用可变产品时,它会返回“库存”选项卡中列出的 sku,而不是任何变体的 sku。那么什么是在数组中获取这些变体 sku 的好方法呢?

这是一些关于我如何考虑该过程的伪代码

$inventory_sku = 'sku1';
$variation_skus = get_skus_by_inv_sku($inventory_sku);
echo $variation_skus[0]; 

提前致谢!

4

2 回答 2

3

最短最轻的方法是使用WPDBClass将 SQL 查询嵌入到函数中:

function get_variations_skus( $product_id ){
    global $wpdb;

    return $wpdb->get_col("
        SELECT pm.meta_value
        FROM {$wpdb->prefix}postmeta as pm
        INNER JOIN {$wpdb->prefix}posts as p ON p.ID = pm.post_id
        WHERE p.post_type = 'product_variation'
        AND p.post_status = 'publish'
        AND p.post_parent = $product_id
        AND pm.meta_key = '_sku'
        AND pm.meta_value != ''
    ");
}

代码位于您的活动子主题(或活动主题)或插件的 function.php 文件中。测试和工作。

用法- 在可变产品中:

global $product;

// Variable product main sku
$sku = $product->get_sku();

// The variations skus for this variable product (in an array)
$variations_skus = get_variations_skus( $product->get_id() );

// Testing output variations skus:  Array to string conversion (coma separated skus)
echo sizeof($variations_skus) > 0 ? implode( ', ', $variations_skus ) : 'No skus';
于 2019-01-03T23:40:59.363 回答
-1

更好的选择是使用内置类之一来实例化正确的对象:

$product = new WC_Product_Simple($product_id)
$product = new WC_Product_Variation($variation_id)
$product = new WC_Product_Grouped($grouped_id)
$product = new WC_Product_External($external_id)

get_sku()并直接从中调用方法:

$product->get_sku();
于 2019-12-13T12:00:29.230 回答