php - Woocommerce中儿童的不同价格
问题描述
我正在创建一个旅行社网站,客户需要为每种产品提供两种不同的价格。一种供儿童使用,另一种供成人使用。
例如,成人的产品价格为 100 美元,儿童的产品价格为 90 美元。所以在单个产品页面中我想要两个输入字段:“成人数量”和“儿童数量”,我希望它根据用户输入的数量来计算价格。
因此,例如,如果用户键入“2 个成人”和“1 个孩子”,则购物车总额应为 290 美元
谁能帮我看看怎么做?
我知道如何在产品管理中为儿童价格创建自定义字段和单个产品页面中的输入字段,但我不知道如何进行计算并将其显示在购物车中。
提前致谢
解决方案
我考虑过使用产品变体,但我希望用户能够一次将这两个数量添加到购物车中,而不必添加第一个成人和之后的儿童。
我对编程很陌生,所以我绝对不知道实现我想要的最佳实践,但到目前为止我尝试的是:
在产品管理页面中创建了一个额外的字段来接收儿童折扣。因此,成人的价格为 100 美元,儿童可获得 10 美元的折扣。
/* create field in product advanced */
function create_child_discount_field() {
$args = array(
'id' => 'child_discount',
'label' => __( 'Discount for children', 'cfwc' ),
'class' => 'custom-field',
);
woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_advanced', 'create_child_discount_field' );
/* save field */
function save_child_discount_field( $post_id ) {
$product = wc_get_product( $post_id );
$title = isset( $_POST['child_discount'] ) ? $_POST['child_discount'] : '';
$product->update_meta_data( 'child_discount', sanitize_text_field( $title ) );
$product->save();
}
add_action( 'woocommerce_process_product_meta', 'save_child_discount_field' );
在产品页面中创建输入字段,如下所示:
add_action( 'woocommerce_before_add_to_cart_button', 'custom_qty_fields', 5 );
function custom_qty_fields(){
echo '<div class="custom-field">
<p>Quantity of adults:</p>
<input type="text" name="qty_adults" value="" title="Qty Adults">
</div>
<div class="custom-field">
<p>Quantity of children:</p>
<input type="text" name="qty_children" value="" title="Qty Children">
</div>';
}
现在,由于我不知道如何发送这些数量字段并计算值,这就是我所做的:
我已经使用 css (opacity: 0) 隐藏了原始的 Woocommerce 数量字段,并使用 jquery 计算了儿童的数量 + 成人的数量,然后将结果设置在隐藏的 woocommerce 数量字段中。因此,假设用户输入 5 个成人和 2 个儿童,jquery 将计算 5 + 2 并将 woocommerce 标准数量字段设置为 7,因此购物车的总数量为 7。
然后我要做的是,计算儿童数量乘以产品中设置的儿童折扣字段,并使用购物车计算费用操作将值设置为折扣:
add_action('woocommerce_cart_calculate_fees' , 'add_discount_for_children');
function add_discount_for_children( WC_Cart $cart ){
$discount = ??? //no clue on how to do that :(
$cart->add_fee( 'Discount for children', -$discount);
}
我真的不知道实现这一目标的最佳实践,而且我可能以非常糟糕的方式做到这一点,但我希望你们能更好地理解我想要什么,并以正确的方式指出我。
再次感谢!
推荐阅读
- r - 在 R Shiny 中使用 outputOptions 时出错
- scala - Spark无法评估表达式:窗口表达式的滞后
- java - RXAndroid:从困难列表中获取列表对象
- typescript - Typescript:根据输入值(枚举)返回函数的类型
- javascript - 键盘事件起作用时鼠标事件不起作用
- curl - 无法下载 tar 文件,解压并复制到 ubuntu 中的特定目录
- coldfusion - ColdFusion 与 SharePoint 的 CFSharepoint 集成
- git - git-svn:迁移具有不同层次级别分支的 SVN 存储库
- php - Symfony 2.8 -> 3.4 本地开发速度降低
- android - 使用 Flutter 加载 AssetImages