WooCommerce: изменить HTML структуру полей выставления счетов при оформлении заказа - PullRequest
1 голос
/ 20 апреля 2020

Я хочу использовать плавающие метки для полей выставления счетов. Поэтому мне нужно поместить элемент <label> после поля <input> в структуре HTML.

В данный момент моя структура выглядит следующим образом:

<p class="form-row form-row-first validate-required" id="billing_first_name_field" data-priority="10">
    <label for="billing_first_name" class="">First Name&nbsp;<abbr class="required" title="required">*</abbr></label>
    <span class="woocommerce-input-wrapper">
        <input type="text" class="input-text form-control" name="billing_first_name" id="billing_first_name" placeholder="" value="First Name" autocomplete="given-name">
    </span>
</p>

Я хочу метка после элемента input / span, например:

<p class="form-row form-row-first validate-required" id="billing_first_name_field" data-priority="10">
    <span class="woocommerce-input-wrapper">
        <input type="text" class="input-text form-control" name="billing_first_name" id="billing_first_name" placeholder="" value="First Name" autocomplete="given-name">
    </span>
    <label for="billing_first_name" class="">First Name&nbsp;<abbr class="required" title="required">*</abbr></label>
</p>

Есть ли способ изменить вывод полей?

Я нашел несколько хуков для изменения некоторых элементов полей: https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/

Но это все, что связано с содержанием элементов. Не сама структура HTML. Это вообще возможно?

1 Ответ

2 голосов
/ 20 апреля 2020

$field содержит полный вывод <p>...</p>. Таким образом, вы можете полностью настроить выход. Чтобы сохранить динамичность c, вы можете использовать значения из $args


См .: https://github.com/woocommerce/woocommerce/blob/master/includes/wc-template-functions.php#L2830 и сопровождающий код, как сделай это

function change_woocommerce_field_markup($field, $key, $args, $value) {
    if( $key === 'billing_first_name') {
        $field = 'my html';
    }
    return $field;
} 

add_filter("woocommerce_form_field_text","change_woocommerce_field_markup", 10, 4);
...