Настройка шаблона Woocommerce my-account / form-edit-address

Возникли проблемы с адресной областью /my-account/edit-addresses/

  1. Я хотел бы настроить поля формы в шаблоне form-edit-addresses.php, Например, я хотел бы изменить для всех полей, а также отдельно разместить некоторые в отдельных классах:
<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 <abbr class="required" title="required">*</abbr></label>
<input type="text" class="input-text " name="billing_first_name" id="billing_first_name" placeholder="" value="Name"></p>

в

<div class="form-group form-group-default input-group">
<div class="form-input-group">
<label for="billing_first_name" class="">Company</label>
<input type="text" class="input-text " name="billing_first_name" id="billing_first_name" placeholder="" value="Name">
</div>

Обратите внимание, что это только HTML-теги, взятые из проверки, и неправильные поля для работы формы. С этим я справлюсь — это просто поиск или замена полей.

Это текущий макет, который не очень адаптируется к моим потребностям

Это то, что мне нужно, чтобы форма выглядела, используя теги выше

  1. Второе, что я хотел бы сделать, это добавить эту форму в /my-account/edit-addresses/ URL / Slug, а не /my-account/edit-addresses/billing

  2. В-третьих, сделать форму при отправке перенаправления на /my-account/ вместо /my-account/edit-addresses/ и включать любые уведомления Woocommerce

  3. Последний пункт состоит в том, чтобы удалить First Name Last Name Email Phone поля. Я предполагаю, что это легко исправить, выполнив шаг 1 и удалив ненужные поля формы.

Очень ценю любое время, уделяемое поиску решений этих проблем.

ура

3

Решение

Вы не можете изменить <p> тег (удаление всех существующих атрибутов + значений) в <div> как, конечно, сломать некоторые процессы, потому что на этом включен конкретный jooascript woocommerce …

Теперь вы можете использовать woocommerce_form_field_args крючок фильтра, чтобы изменить учебный класс глобально на всех <p> теги и вы можете удалить требуется поведение на всех полях тоже, так <abbr class="required" title="required">*</abbr> будут удалены

Вот этот код:

add_filter( 'woocommerce_form_field_args', 'custom_wc_form_field_args', 10, 3 );
function custom_wc_form_field_args( $args, $key, $value ){
// Only on My account > Edit Adresses
if( is_wc_endpoint_url( 'edit-account' ) || is_checkout() ) return $args;

$args['class'] = array('form-input-group');
$args['required'] = false;

return $args;
}

Таким образом, вам придется управлять CSS, чтобы вносить изменения в дизайн.

Все доступные аргументы $ args в этом массиве:

'type'              # @ string
'label'             # @ string
'description'       # @ string
'placeholder'       # @ string
'maxlength'         # @ boolean
'required'          # @ boolean
'autocomplete'      # @ boolean
'id'                # => $key (argument)
'class'             # @ array
'label_class'       # @ array
'input_class'       # @ array
'return'            # @ boolean
'options'           # @ array
'custom_attributes' # @ array
'validate'          # @ array
'default'           # @ string
'autofocus'         # @ string
'priority'          # @ string

С woocommerce_form_field_{field_type} Фильтр хук вы можете получить доступ к настройкам поля индивидуально в зависимости от типа поля. Этот хук имеет 4 доступных аргумента: $field, $key, $args а также $value

2

Другие решения

Я выяснил 2, 3 и 4 части моего вопроса — на случай, если кто-то еще искал …

Часть 2 должна была добавить form-edit-address.php в edit-address

Я добавил это к my-address.php шаблон

<?php
// get the user meta
$userMeta = get_user_meta(get_current_user_id());

// get the form fields
$countries = new WC_Countries();
$billing_fields = $countries->get_address_fields( '', 'billing_' );
$shipping_fields = $countries->get_address_fields( '', 'shipping_' );
?>

<!-- billing form -->
<?php
$load_address = 'billing';
$page_title   = __( 'Billing Address', 'woocommerce' );
?>
<form action="/my-account/edit-address/billing/" class="edit-account" method="post">

<h2><?php echo apply_filters( 'woocommerce_my_account_edit_address_title', $page_title ); ?></h2>

<?php do_action( "woocommerce_before_edit_address_form_{$load_address}" ); ?>

<?php foreach ( $billing_fields as $key => $field ) : ?>

<?php woocommerce_form_field( $key, $field, $userMeta[$key][0] ); ?>

<?php endforeach; ?>

<?php do_action( "woocommerce_after_edit_address_form_{$load_address}" ); ?>

<p>
<input type="submit" class="button" name="save_address" value="<?php esc_attr_e( 'Save Address', 'woocommerce' ); ?>" />
<?php wp_nonce_field( 'woocommerce-edit_address' ); ?>
<input type="hidden" name="action" value="edit_address" />
</p>

</form>

Чтобы сделать часть 3 и перенаправить отправить из form-edit-address.php Я добавил следующее в мою тему functions.php

function action_woocommerce_customer_save_address( $user_id, $load_address ) {
wp_safe_redirect(wc_get_page_permalink('myaccount'));
exit;
};
add_action( 'woocommerce_customer_save_address', 'action_woocommerce_customer_save_address', 99, 2 );

Чтобы сделать часть 4 и удалить поля из form-edit-address.php Я добавил следующее в мою тему functions.php

add_filter( 'woocommerce_billing_fields' , 'custom_override_billing_fields' );

function custom_override_billing_fields( $fields ) {
unset($fields['billing_first_name']);
unset($fields['billing_last_name']);
unset($fields['billing_phone']);
unset($fields['billing_email']);
return $fields;
}

Любая помощь с другой частью этого вопроса будет принята с благодарностью.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector