wordpress 进行自定义选择时更改价格变化

rsl1atfo  于 2022-11-22  发布在  WordPress
关注(0)|答案(1)|浏览(244)

我有一个woocommerce变量产品在循环之外,而不是在单个产品页面上,我要根据表单的选择更改变体价格。如果选择了区域,则使用为该变体创建的自定义域中添加的自定义价格更改变体价格(区域1或区域2)。我的代码用于在选择后显示正确的价格,但当我将变体添加到购物车时,变体的默认价格被添加到购物车,而不是自定义价格价格。

<form class="areas-form" method="POST" action="">
    Select Your Area 
    <select name="area" onchange="this.form.submit()">
        <option value="" disabled selected>--select--</option>
        <option value="area1">Area 1</option>
        <option value="area2">Area 2</option>
    </select>
</form>
add_filter( 'woocommerce_product_variation_get_price', 'varient_price', 99, 2 ); // this code is added in functions.php

function varient_price($price, $variation){
if (  $variation->product_type == 'variation'  ) {
      if(isset($_POST["area"])){
       $area=$_POST["area"];
      } 
    $price = get_post_meta( $variation->variation_id, $area.'_price',true);
    
        return $price;
}
}
jyztefdp

jyztefdp1#

根据你的问题评论,休息显示和其他事情你正在管理。在这里,我刚刚附上了woocommerce挂钩和计算,让您的地区价格设置在您选择的变化。

首先,您需要根据区域信息获取所选选项的动态价格。
其次,以下代码将帮助您设置要添加到购物车 meta中的参数请求:

function add_area_data_cart_meta( $cart_item_data, $product_id ) {
     
    if( isset( $_POST['area'] ) ) {
        $cart_item_data[ "area" ] = $_POST['area'];     
    }

    
    return $cart_item_data;
     
}
add_filter( 'woocommerce_add_cart_item_data', 'add_area_data_cart_meta', 99, 2 );

第三,在将产品添加到购物车之前。上面的代码将获取我们使用上面的代码添加的区域价格值,下面的代码将在购物车中将您的区域价格设置为新价格。

function calculate_area_price_as_variation_price( $cart_object ) {
    if( !WC()->session->__isset( "reload_checkout" )) {
        /* Gift wrap price */
        $additionalPrice = 100;
        foreach ( WC()->cart->get_cart() as $key => $value ) {
            if( isset( $value["area"] ) ) {                
                if( method_exists( $value['data'], "set_price" ) ) {
                                        /* Woocommerce 3.0 + */
                    $value['data']->set_price( $value["area"] );
                } else {
                        /* Version before 3.0 */
                    $value['data']->price = ( $value["area"] );                    
                }           
            }
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'calculate_area_price_as_variation_price', 99 );

如果您发现任何问题,请告诉我。

  • 谢谢-谢谢

相关问题