Я пытаюсь переопределить поле account_display_name
в разделе my-account (вошедший в систему пользователь), который я выполняю с помощью двух крючков. Первый удаляет атрибут required
, а второй обновляет поле display_name
на основе ввода имени и фамилии.
Этот фильтр позволяет мне удалить атрибут required="required"
из display_name
и работает по назначению:
add_filter('woocommerce_save_account_details_required_fields', 'audp_myaccount_required_fields');
function audp_myaccount_required_fields( $required_fields ) {
unset( $required_fields['account_display_name'] );
return $required_fields;
}
Это следующее действие предназначено для того, чтобы я мог сохранить отправленные account_first_name
и account_last_name
как display_name
:
add_action( 'profile_update', 'audp_myaccount_display_name', 20, 2 );
function audp_myaccount_display_name( $display_name ) {
global $current_user;
if ( isset( $_POST['account_first_name'] ) && isset( $_POST['account_last_name'] ) ) {
if ( ! empty( $_POST['account_first_name'] ) && ! empty( $_POST['account_last_name'] ) ) {
wp_update_user(
array (
'ID' => $current_user->ID,
'display_name' => sanitize_text_field( $_POST['account_first_name'] ) . ' ' . sanitize_text_field( $_POST['account_last_name'] ),
)
);
}
}
}
Проблема, с которой я столкнулся с этим кодом, - это зацикливание после отправки данных. Страница "в конечном итоге" возвращает внутреннюю ошибку 500. Если я остановлю процесс (уйду) и перезагружу страницу, данные обновятся. Я просто не знаю, как выйти из этого l oop?
Я изучил некоторые варианты, включая remove_action( 'profile_update', 'audp_myaccount_display_name', 20, 2 )
перед wp_update_user()
, а затем add_action( 'profile_update', 'audp_myaccount_display_name', 20, 2 )
после wp_update_user()
, но это не так. похоже, тоже работает.
Любая помощь приветствуется!