根据购物车总计向 WooCommerce Checkout 添加自定义输入文件字段

问题描述 投票:0回答:1

我正在尝试向 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 结帐页面的指导吗?

任何帮助将不胜感激。

php wordpress woocommerce upload checkout
1个回答
0
投票

由于上传在 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()
    获取购物车总额(含税),
© www.soinside.com 2019 - 2024. All rights reserved.