【问题标题】:Get the product variations skus from a variable product in WooCommerce从 WooCommerce 中的可变产品获取产品变体 sku
【发布时间】:2023-03-14 22:42:02
【问题描述】:

我正在尝试从 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]; 

提前致谢!

【问题讨论】:

    标签: php wordpress woocommerce variations sku


    【解决方案1】:

    最短最轻量的方法是使用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 文件中。经过测试并且可以工作。

    USAGE - 在可变产品中:

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

    【讨论】:

    • 这个答案可以完成工作并提供解决方案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 2019-03-08
      • 2018-07-20
      • 2014-07-04
      相关资源
      最近更新 更多