Возникли проблемы с адресной областью /my-account/edit-addresses/
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-теги, взятые из проверки, и неправильные поля для работы формы. С этим я справлюсь — это просто поиск или замена полей.
Второе, что я хотел бы сделать, это добавить эту форму в /my-account/edit-addresses/
URL / Slug, а не /my-account/edit-addresses/billing
В-третьих, сделать форму при отправке перенаправления на /my-account/
вместо /my-account/edit-addresses/
и включать любые уведомления Woocommerce
Последний пункт состоит в том, чтобы удалить First Name
Last Name
Email
Phone
поля. Я предполагаю, что это легко исправить, выполнив шаг 1 и удалив ненужные поля формы.
Очень ценю любое время, уделяемое поиску решений этих проблем.
ура
Вы не можете изменить <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, 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;
}
Любая помощь с другой частью этого вопроса будет принята с благодарностью.