无法获取woocommerce产品的自定义字段

时间:2020-01-07 12:22:11

标签: php wordpress woocommerce

我正在尝试使用此功能获取自定义字段,然后乘以产品价格。我正在获取产品价格,但是在打印自定义字段时,我只会得到零。.我不明白为什么,我也尝试过get_metadata()get_post_custom() ..但是没有用

    function filter_woocommerce_cart_product_subtotal( $product_subtotal, $product, $quantity, $instance ) { 
        $fields = get_post_meta(get_the_id(), false);
        $add_on = $product->get_price()*$fields[0] + $product->get_price()*$fields[1] + $product- 
                  >get_price()*0.75*$fields[2];

        return $product_subtotal + $add_on; 
}; 
add_filter( 'woocommerce_cart_product_subtotal', 'filter_woocommerce_cart_product_subtotal', 10, 4 ); 

我也尝试过获取单个字段,但总是获取零。

我可以在下面的函数中获取自定义字段,并将其保存在全局变量中,但是当我尝试在上面的函数中访问全局变量时,我又得到零。

function tour_product_add_on_cart_item_data( $cart_item, $product_id, $cart ){
/*
if( isset( $_POST['time_add_on'] ) ) {
    $cart_item['time_add_on'] = sanitize_text_field( $_POST['time_add_on'] );
}
*/
if( isset( $_POST['date_add_on'] ) ) {
    $cart_item['date_add_on'] = sanitize_text_field( $_POST['date_add_on'] );
}
if( isset( $_POST['place_add_on'] ) ) {
    $cart_item['place_add_on'] = sanitize_text_field( $_POST['place_add_on'] );
}
if( isset( $_POST['adult_add_on'] ) ) {
    $cart_item['adult_add_on'] = sanitize_text_field( $_POST['adult_add_on'] );
}
if( isset( $_POST['child_add_on'] ) ) {
    $cart_item['child_add_on'] = sanitize_text_field( $_POST['child_add_on'] );
}
if( isset( $_POST['infant_add_on'] ) ) {
    $cart_item['infant_add_on'] = sanitize_text_field( $_POST['infant_add_on'] );
}
    $product = wc_get_product($product_id);
    $GLOBALS["fee"] = $_POST['adult_add_on']*$product->get_price() + 
 $_POST['child_add_on']*$product->get_price() + $_POST['infant_add_on']*0.75*$product->get_price();
    return $cart_item;

}

2 个答案:

答案 0 :(得分:1)

get_post_meta()第二个参数是meta键值。所以你应该使用例如 $date_add_on = get_post_meta(get_the_id(), 'date_add_on')

答案 1 :(得分:0)

所以,我已经解决了这个问题。当您向woocommerce产品或wordpress帖子中添加自定义字段时,您必须更新其元数据。这是添加自定义字段所必须遵循的每个步骤的精彩教程。

HOW TO ADD WOOCOMMERCE CUSTOM FIELDS TO A PRODUCT