WooCommerce结账页如何在自定义复选框中显示商品名称与价格
WooCommerce结账页复选框添加商品名称与价格的实现方案
可以实现在复选框标签中显示购物车商品的名称及价格,只需修改你现有代码中的zpd_add_checkout_privacy_policy函数,添加购物车商品信息的获取逻辑即可,具体修改如下:
修改后的完整代码
// Checkout page - checkbox function zpd_add_checkout_privacy_policy() { $configSupportFile = '/home/web1/configsupport.php'; if( !file_exists( $configSupportFile ) ) { return 'Cannot find config support file.'; } require $configSupportFile; // 获取购物车中所有商品的名称与对应总价 $cart_items = WC()->cart->get_cart(); $product_info = ''; if ( ! empty( $cart_items ) ) { foreach ( $cart_items as $item ) { $product = $item['data']; $product_name = $product->get_name(); // 计算当前商品的总价(包含购买数量),用wc_price格式化价格显示 $product_total_price = wc_price( $item['line_total'] ); $product_info .= sprintf( '%s的%s费用,', $product_name, $product_total_price ); } // 移除末尾多余的标点符号 $product_info = rtrim( $product_info, ',' ); } woocommerce_form_field( 'privacy_policy', array( 'type' => 'checkbox', 'class' => array('form-row privacy'), 'label_class' => array('woocommerce-form__label woocommerce-form__label-for-checkbox checkbox'), 'input_class' => array('woocommerce-form__input woocommerce-form__input-checkbox input-checkbox'), 'required' => true, 'label' => '下单将收取'.$product_info.',此为一次性购买,USPS配送通常需3-5个工作日,信用卡账单显示为'.$descriptor[$domain].',下单即同意我们的<a href="/privacy-policy/" target="_blank">隐私政策</a>及<a href="/terms-conditions/" target="_blank">条款与条件</a>', )); } add_action('woocommerce_review_order_before_submit', 'zpd_add_checkout_privacy_policy', 9); // Show notice if customer doesn't check the box (required) function zpd_privacy_not_agreed() { if ( ! isset( $_POST['privacy_policy'] ) || ! (int)$_POST['privacy_policy'] ) { wc_add_notice( __( '请阅读并接受相关条款以继续下单。' ), 'error' ); } } add_action( 'woocommerce_checkout_process', 'zpd_privacy_not_agreed' );
关键修改说明
- 通过
WC()->cart->get_cart()获取购物车中的所有商品数据 - 遍历商品数据,提取每个商品的名称和对应总价(包含购买数量),用
wc_price()格式化价格为符合站点货币设置的显示格式 - 将商品信息整合到复选框的标签文本中,替换原有的固定文本
- 优化了复选框未勾选时的错误提示信息,更贴合实际场景
可选调整
如果你的场景中购物车通常只有单一商品,或者需要显示购物车总价而非单个商品信息,可以将商品信息获取部分替换为:
// 获取购物车总价 $cart_total = WC()->cart->get_cart_total(); $product_info = sprintf( '购物车商品总价%s', $cart_total );
内容的提问来源于stack exchange,提问作者Willem Prinsloo
相关产品推荐
相关产品推荐

