WooCommerce正在修改结账页面上的html吗?

时间:2019-09-27 作者:the_lar

我正在尝试将签出页面的“一些”字段包装在一个div中,并插入一些按钮,因为我正在实现一些地址验证。

基本上从一开始,我需要一个公司、地址行1、地址行2、城镇和邮政编码的包装,这样我就可以显示/隐藏它们,但我似乎什么都做不到。这是我试过的-

在我的过滤器文件中:

function change_woocommerce_field_markup($field, $key, $args, $value){
    if($key === \'billing_company\') {
        $field = \'<div class="address-wrapper">\'.$field;
    }
    else if ($key === \'billing_postcode\') {
        $field = $field.\'</div>\';
    }
    else {
        $field = $field;
    }
    return $field;
}
add_filter(\'woocommerce_form_field\', \'\\App\\change_woocommerce_field_markup\', 10, 4);
因此,我正在使用打开和关闭包装器的html预加和附加相关字段。但是,生成的HTML如下所示:

<div class="address-wrapper"></div> <p class="form-row form-row-first validate-required" id="billing_first_name_field".... <p class="form-row form-row-last validate-required" id="billing_last_name_field"....

所以它把包装纸放在容器的顶部!我不明白,这是怎么回事?

ThanksKevin公司

2 个回复
SO网友:Hồ Trọng Linh Ân

在您的情况下,不需要使用过滤器来注入包装器。只需重写签出模板文件并将包装器放在需要的行上。在您的问题中,您想修改账单表单。所以,它应该来自这个文件woocommerce/templates/checkout/form-billing.php. 您可以在以下位置注入包装器:this line.

如果您不知道如何覆盖WooCommerce模板。请访问此链接:https://docs.woocommerce.com/document/template-structure/

UPDATE: code sample.

foreach ( $fields as $key => $field ) {
    $field[\'return\'] = true;
    $before = "";
    $after = "";

    switch ($key) {
        case \'billing_company\':
            $before = \'<div class="address-wrapper">\';
            break;
        case \'billing_postcode\':
            $after = \'</div>\';
            break;      
        default:
            # code...
            break;
    }

    echo $before . woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ) . $after;
}

SO网友:Gigawwad

我正在使用Bootstrap 4。x、 所以我也想改变结构。我所做的工作如下:

在里面woocommerce/templates/checkout/form-billing.php 我可以通过调用以下命令分别针对所有字段:

<div class="row">
    <div class="col-6">
       <?php woocommerce_form_field(\'billing_first_name\', array(\'placeholder\' => \'Vorname *\', \'required\' => true), $checkout->get_value(\'billing_first_name\')); ?>
    </div>
    <div class="col-6">
       <?php woocommerce_form_field(\'billing_last_name\', array(\'placeholder\' => \'Nachname *\', \'required\' => true), $checkout->get_value(\'billing_last_name\')); ?>
    </div>
</div>
输出插入<p class="form-row form-row-first validate-required" id="billing_<name-of-field>_field">, 因为它是在中预定义的:plugins/woocommerce/includes/wc-template-functions.php 第2692行。所以没有办法改变它,因为它是在模板函数中硬编码的。您可以用普通HTML编写自己的表单字段,检查woocommerce_form_field();

@谢谢你提供的信息:谢谢你指出国家字段有问题,我遇到了这个恼人的错误。如果检查文件,则第141行有以下代码:rows.detach().appendTo( wrapper );. 如果您查看第114行,您将看到rows 指向.form-row, 在wc模板函数中硬编码。php。

相关推荐