WooCommerce定制结账帐单

时间:2020-03-24 作者:Buzut

我想把结帐单放在两栏上。有没有一种方法可以将一半字段封装在一个div中,另一个hald封装在另一个div中,这样就可以方便地使用floatflexbox?

表单在中调用form-billing.php 通过woocommerce_form_field 在a中forEach 循环,但我不知道在哪里可以找到表单模板本身来修改它。

我也知道woocommerce_checkout_fields 过滤器存在,但在某些div中封装字段似乎没有帮助。

2 个回复
最合适的回答,由SO网友:Buzut 整理而成

我的问题错了,因为我忘记了我以前试过的一些东西。将表单字段拆分为两个div很容易:

// form-billing.php
<div class="woocommerce-billing-fields__field-wrapper">
    <?php
        $fields = $checkout->get_checkout_fields(\'billing\');
        $fields_half_count = round(count($fields) / 2);
        $i = 0;

        echo \'<div class="one">\';
        foreach ($fields as $key => $field) {
            if ($i++ == $fields_half_count) echo \'</div><div class="two">\';
            woocommerce_form_field($key, $field, $checkout->get_value($key));
        }
        echo \'</div>\';
    ?>
</div>
现在的问题是,当checkout JS启动时,它会重新排列所有字段并将它们放在一个div中。

可以禁用它,但它用于根据运输国家获取运费,也可以根据国家管理字段(美国有州,西班牙有省等),因此禁用它不是一个真正的选项。

到目前为止,我找到的唯一解决方法是使用CSScolumn-count: 2 在…上.woocommerce-billing-fields__field-wrapper 使浏览器在两列上显示它。

布局并不完美,但这是迄今为止我找到的最好的选择。否则,需要使用自定义JS来处理WooCommerce签出JS所做的工作。

SO网友:7uc1f3r

foreach循环中的woocommerce\\u form\\u字段

https://github.com/woocommerce/woocommerce/blob/master/templates/checkout/form-billing.php#L39


https://github.com/woocommerce/woocommerce/blob/master/includes/wc-template-functions.php#L2607

因此,您可以根据需要调整以下代码

function change_woocommerce_field_markup( $field, $key, $args, $value ) {
    //  Remove the .form-row class from the current field wrapper
    $field = str_replace(\'form-row\', \'\', $field);

    //  Wrap the field (and its wrapper) in a new custom div, adding .form-row so the reshuffling works as expected, and adding the field priority
    $field = \'<div class="form-row single-field-wrapper" data-priority="\' . $args[\'priority\'] . \'">\' . $field . \'</div>\';

    return $field;
}
add_filter( \'woocommerce_form_field\', \'change_woocommerce_field_markup\', 10, 4 );

在模板文件中(form-billing.php), 在foreach循环中。在需要时使用if语句添加div。

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register