WooCommerce挂钩中的产品变体和父变量产品对象

时间:2020-10-13 09:30:02

标签: php wordpress woocommerce product product-variations

我为各种变化制定了自定义交货时间信息。但是由于某种原因,我无法获取该变体的父产品ID,无法在我的函数中使用它。我尝试了以下操作-如果将$ id直接设置为51237,我的代码可以工作,但是使用$ post来获取ID却没有。 任何帮助表示赞赏!

// here I am loading special infos for each variation

add_filter( 'woocommerce_available_variation', 'load_variation_products_fields', 1 );
function load_variation_products_fields( $variations ) {
    $variations['variation_cmpzDeliveryTime'] = get_delivery_time( $variations[ 'variation_id' ] ) ;
    return $variations;
}


function get_delivery_time ( $product_id) {
    $product_obj = wc_get_product( $product_id );
    

    // here I want the post ID (so the parent product ID if the product type is variation)
    global $post;
    $id = $post->ID; 

    var_dump ($id); // this outputs "int(51237)" for each variation - that seems to be right!

    switch($product_obj->get_type())    {
        case 'variation':
            if (Helpers::get_product_multi_inventory_status($product_id) == 'no' ) {
                $_pf = new WC_Product_Factory(); 
                $_product = $_pf->get_product($product_id);
                $stock_status = $_product->get_stock_status();
                if ( wc_gzd_get_product( $product_id )->get_delivery_time_html() == '' )    { 
                    if ( ($stock_status == 'instock')   )   {
                        // $id is ignored - if I put here 51237, it works!
                        return set_delivery_text('instock', $id); 
                    } else  {
                        return set_delivery_text('outofstock');
                    }
                }
            }
            elseif (Helpers::get_product_multi_inventory_status($product_id) == 'yes' ) {
                return get_delivery_time_multi_inventory($product_id);
            }
            break;
    }
}

1 个答案:

答案 0 :(得分:2)

函数中有一些缺少的参数挂在jest.useFakeTimers() await act(async () => { triggerDebounced() jest.advanceTimersByTime(DEBOUNCED_TIME) }) 上……您需要将其替换为:

woocommerce_available_variation

现在您可以看到有3个参数,其中// here I am loading special infos for each variation add_filter( 'woocommerce_available_variation', 'load_variation_products_fields', 10, 3 ); function load_variation_products_fields( $variation_data, $product, $variation ) { $variation_data['variation_cmpzDeliveryTime'] = get_delivery_time( $variation_data, $product, $variation ) ; return $variation_data; } 是父变量乘积对象,$product是乘积变量对象。

因此,您将进行更改,还必须更改$variation函数代码,例如:

get_delivery_time()

应该会更好。