我正在尝试向 WooCommerce 结帐页面添加自定义字段,但我希望它仅在订单总数超过一定金额(假设为 500)时才显示。我已经考虑修改 form-checkout.php 模板文件在我的主题中,但我不确定如何实现这个条件逻辑:
// Remove currency symbol and comma
$cart_total_numeric = floatval(str_replace(array(get_woocommerce_currency_symbol(), ','), '', $cart_total));
// Check if order total is greater than 500
if ($cart_total_numeric > 500) {
echo '<div id="billing_uploadsign_field" class="billing-uploadsign-field">';
woocommerce_form_field('billing_uploadsign', array(
'type' => 'file',
'class' => array('form-row-wide'),
'label' => __('Upload Signature', 'woocommerce'),
'required' => true,
), $checkout->get_value('billing_uploadsign'));
echo '</div>';
}
?>
</div>
<?php do_action('woocommerce_checkout_after_order_review'); ?>
但是,无论订单总数如何,自定义字段都不会显示在结帐页面上。我怀疑我的条件逻辑的实现可能存在问题。
有人可以提供有关如何根据订单总额正确将自定义字段添加到 WooCommerce 结帐页面的指导吗?
任何帮助将不胜感激。
由于上传在 WooCommerce 结帐中不起作用,您将需要使用类似于此线程中的内容:How to add file upload to WooCommerce checkout?
由于结帐页面中的购物车总额可能会根据所选的运输方式而变化,因此您应该使用购物车小计。
此外,您可以使用
woocommerce_review_order_before_submit
可用的挂钩,而不是覆盖 WooCommerce 模板文件。
启用结账上传并从此线程添加自定义插件后,您可以有条件地显示文件上传字段:
add_action( 'woocommerce_review_order_before_submit', 'display_checkout_upload_signature_field' );
function display_checkout_upload_signature_field() {
if ( WC()->cart->subtotal > 500 ) {
echo '<div class="upload_file-wrapper">';
// The select field
woocommerce_form_field('upload_signature', array(
'type' => 'file',
'class' => array('form-row-wide'),
'label' => __('Upload Signature', 'woocommerce'),
'required' => true,
'max_size' => '3072', // in ko (here 3 Mo size limit)
'accept' => 'image/*,.doc,.docx,.rtf,.txt',
), WC()->checkout->get_value('upload_signature'));
echo '</div>';
}
}
您肯定需要在此线程上解释更多内容,例如字段验证(如果该字段是必需的),等等......
WC()->cart->subtotal
获取购物车小计,包括税费,WC()->cart->get_subtotal()
获取购物车小计(不含税),WC()->cart->get_total()
获取购物车总额(含税),