根据购物车总计向 WooCommerce 结账页面添加自定义字段

问题描述 投票: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 结帐页面的指导吗?

任何帮助将不胜感激。

woocommerce custom-fields
1个回答
0
投票

由于上传在 WooCommerce 结帐中不起作用,您将需要使用类似于此线程中的内容:How to add file upload to WooCommerce checkout?

由于结帐页面中的购物车总额可能会根据所选的运输方式而变化,因此您应该使用购物车小计。

您不需要覆盖模板,因为您可以使用

woocommerce_checkout_after_order_review
可用的钩子。

一旦您启用结帐上传并从此线程添加自定义插件,您就可以添加文件上传字段,例如:

add_filter( 'woocommerce_checkout_after_order_review', 'display_checkout_upload_signature_field', 50 );
function display_checkout_upload_signature_field() {
    if ( WC()->cart->subtotal >= 500 ) {
        echo '<div class="upload_file-wrapper">';

        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>';
    }
}

您可能还需要一些更多的东西,如此线程上所解释的那样,例如字段验证(如果需要),等等......

© www.soinside.com 2019 - 2024. All rights reserved.