Все, что я прочитал за последние пару дней, указывает на то, что если я хочу сохранить поля в user-edit. php (User Admin Backend), я должен использовать хуки edit_user_profile_update
& personal_options_update
(и я не включаю крючок проверки в этот вопрос ...)
В кодексе говорится, что:
Рассмотрим пример:
update_user_meta($user_id, 'custom_meta_key', $_POST['custom_meta_key']);
Удостоверьтесь, что вы указали другое имя ключа для ключа данных $_POST
и фактического мета ключа пользователя. Если вы используете один и тот же ключ для обоих, Wordpress по какой-то причине очищает значение, опубликованное под этим ключом.
Таким образом, вы всегда будете получать пустое значение в $_POST['custom_meta_key']
, поэтому измените его в атрибуте name элемента ввода html и добавьте суффикс. Измените его на $_POST['custom_meta_key_data']
, и он передаст данные правильно.
Однако, учитывая тот факт, что я хочу добавить проверки в существующее поле billing_phone
, я не знаю, как создать сказал "custom_meta_key_data
" (например: '_billing_phone'
или 'prefix_billing_phone'
), чтобы затем ввести значение в указанный prefix_billing_phone, чтобы затем преобразовать его в 'billing_phone'
через update_user_meta()
.
Я предоставил свой базовый код ниже, и я два дня искал в inte rnet решение, но не могу найти обходного пути.
Кроме того, str_replace()
не действует, что заставило меня заглянуть внутрь user-edit.php
, а комментарии поддерживают приведенные выше примечания, где между нажатием обновления и перезагрузкой профиля каждая переменная сохраняется как _billing_
(с префиксом '_') и записывается исходное значение (предварительные инструкции if / мой код ниже) и сохраняет это - не то, что я обусловил / пытался проверить. Я не знаю, как это скопировать, чтобы я мог просто проверить свои поля ...
add_action( 'personal_options_update', 'audp_save_user_account_fields' );
add_action( 'edit_user_profile_update', 'audp_save_user_account_fields' );
function audp_save_user_account_fields( $user_id ) {
/* Input Value: "0412 345 678"
* SHOULD Become: "0412345678"
*/
$billing_phone = str_replace( array( ' ', '(', ')' ), '', $_POST['billing_phone'] );
if ( !empty( $_POST['billing_phone'] ) && preg_match( '/^04[0-9]{8}$/D', $billing_phone ) ) {
$billing_phone_query = get_users( array(
'meta_key' => 'billing_phone',
'meta_value' => $billing_phone,
) );
foreach ( $billing_phone_query as $query ) {
if ( $user_id == $query->ID ) {
/* This value ($billing_phone) should be eg: "0412345678"
* but remains "0412 345 678"
*/
update_user_meta( $user_id, 'billing_phone', $billing_phone );
}
}
}
}
Добавление / редактирование
Под personal_options_update
и edit_user_profile_update
поля по-прежнему не обновляются в соответствии с условиями. Например, если я введу «0411 111 111» (пробелы), пробелы не будут удалены. Я попытался выполнить var_dump( $_POST ); die();
на каждом этапе приведенного ниже условия, и значение ('billing_phone') передает изменения (например: 0411111111), но на update_user_meta()
и при перезагрузке страницы оно возвращается к '0411 111 111 '? Код, который у меня есть:
function audp_save_user_account_fields( $user_id ) {
$billing_phone_key = 'billing_phone';
if ( isset( $_POST[$billing_phone_key] ) ) {
// var_dump( $_POST['billing_phone_key] ) = '0411 111 111'
$billing_phone = preg_replace( '/[^0-9]/i', '', sanitize_text_field($_POST[$billing_phone_key] ) );
// var_dump on $billing_phone = '0411111111'
if ( !empty( $_POST[$billing_phone_key] ) ) {
// var_dump( $billing_phone ) = '0411111111'
update_user_meta( $user_id, 'billing_phone', $billing_phone );
// page reloads with value '0411 111 111'.
}
}
}
add_action( 'edit_user_profile_update', 'audp_save_user_account_fields' );
Я где-то читал, что вам, возможно, придется каким-то образом передать старую переменную и новую переменную и / или удалить user_meta_data, а затем добавить новую, но я не пробовал это все же...?? Будем признательны за любые дальнейшие предложения.