我正在尝试从woocommerce的可变产品中获得一系列好处。每个版本都有自己的sku,我还为产品设置了一个包含所有版本的整体sku(在“库存”标签中)
因此对于简单的产品,此代码有效:
global $product;
$product_sku = $product->get_sku();
但是,当我使用可变产品时,它会返回“库存”标签中列出的sku,而不是变体的任何细节。那么,将这些变异skus放入数组中的好方法是什么?
以下是我对流程的思考方式的伪代码
$inventory_sku = 'sku1';
$variation_skus = get_skus_by_inv_sku($inventory_sku);
echo $variation_skus[0];
谢谢!
答案 0 :(得分:0)
最简单快捷的方法是使用WPDB
Class在函数中嵌入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';
答案 1 :(得分:0)
更好的选择是使用内置类之一实例化正确的对象:
$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();