这个woocommerce_form_field()
是一个pluggable 作用defined 具体如下:
if ( ! function_exists( \'woocommerce_form_field\' ) ) {
/**
* Outputs a checkout/address form field.
*
* @param string $key Key.
* @param mixed $args Arguments.
* @param string $value (default: null).
* @return string
*/
function woocommerce_form_field( $key, $args, $value = null ) {
...
}
}
所以你可以复制
whole 编码到主题的函数中。php文件,并修改表单字段包装器以满足您的需求,就像我更改包装器标记的地方一样
p
到
div
:
if ( ! function_exists( \'woocommerce_form_field\' ) ) {
/**
* Outputs a checkout/address form field.
*
* @param string $key Key.
* @param mixed $args Arguments.
* @param string $value (default: null).
* @return string
*/
function woocommerce_form_field( $key, $args, $value = null ) {
...
$field_container = \'<div class="form-row %1$s" id="%2$s" data-priority="\' . esc_attr( $sort ) . \'">%3$s</div>\';
switch ( $args[\'type\'] ) {
...
case \'state\':
...
if ( is_array( $states ) && empty( $states ) ) {
$field_container = \'<div class="form-row %1$s" id="%2$s" style="display: none">%3$s</div>\';
...
} ...
...
}
...
}
}
或您可以使用
woocommerce_form_field
过滤器,就像这样(我在这里使用
preg_replace()
将包装的标记从
p
到
div
):
add_filter( \'woocommerce_form_field\', \'my_woocommerce_form_field\' );
function my_woocommerce_form_field( $field ) {
return preg_replace(
\'#<p class="form-row (.*?)"(.*?)>(.*?)</p>#\',
\'<div class="form-row $1 test"$2>$3</div>\',
$field
);
}
在我的例子中,替代方法工作得很好,但当然,没有其他(插件、主题或自定义)代码可以更改包装器的标记/HTML。
希望这有帮助。