Поддержка → Проблемы и решения → переменная будущего ID пользователя (wp-admin/user-new.php)
переменная будущего ID пользователя (wp-admin/user-new.php)
-
Какой переменной задается будущий ID пользователя в wp-admin/user-new.php ?
-
Будущий — никакой. id — суррогатный ключ таблицы users, его можно получить от mysql непосредственно после выполнения команды INSERT.
Я пытаюсь добавить поле в wp-admin/user-new.php
Делаю так:
1. Есть филд который определяет переменную $info_id
2. Дописываю код
<?php
add_user_meta($user_id, ‘info_field’, $info_id);
?>
и жду, что по нажатии кнопки Add New User помимо его первого и второго имени в usersmeta добавиться еще и строка с информацией из поля $info_id
(которая будет соответствовать его user_id и иметь meta_key ‘info_field’)нашел еще вот эту тему: http://wordpress.org/support/topic/edit_user_profile-hook-on-add-user-screen?replies=4
но никак не могу результативно собрать информацию воедино(проблема в том, что он все равно почему-то записывает только в строки со стандартным кеем! т.е. добавить юзерку строку first_name1 я не могу((
попробовал так:
if ( empty($user_referred_by) ) $user_referred_by = ''; /** * Filter a user's ref id before the user is created or updated. * * @since 2.0.3 * * @param string $user_referred_by The user's last name. */ $user_referred_by = apply_filters( 'pre_user_user_referred_by', $user_referred_by );
* дописал в user.php
еще добавил
function _get_additional_user_keys( $user ) { $keys = array( 'first_name', 'last_name', 'nickname', 'user_referred_by', 'description', 'rich_editing', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front' ); return array_merge( $keys, array_keys( wp_get_user_contact_methods( $user ) ) ); }
после чего при создании юзера стала появляться нужная строка в базе.
Теперь нужно ее заполнять:
идем в user-new.php
// Load up the passed data, else set to a default. foreach ( array( 'user_login' => 'login', 'first_name' => 'firstname', 'last_name' => 'lastname', 'user_referred_by' => 'referred',
и в форму ставим
<tr class="form-field"> <th scope="row"><label for="user_referred_by"><?php _e('Ref ID') ?> </label></th> <td><input name="user_referred_by" type="text" id="user_referred_by" value="<?php echo esc_attr($referred); ?>" /></td> </tr>
но поле по-прежнему остается пустым(((
* дописал в user.php
идем в user-new.php
Вы, что ли, файлы движка меняете? Кто Вас научил плохому? Прекратите. И научитесь пользоваться API.
В Кодексе дан готовый пример обработки формы.
А поле в форму добавляется обработкой хука
register_form
.Оба обработчика можно поместить в свой плагин. На всё про всё — несколько минут. Взамен — гарантия, что проделанная работа не исчезнет при обновлении движка.
//1. Add a new form element... add_action('user_new_form','myplugin_register_form'); function myplugin_register_form (){ $user_referred_by = ( isset( $_POST['user_referred_by'] ) ) ? $_POST['user_referred_by']: ''; ?> <p> <label for="first_name"><?php _e('as Hook','mydomain') ?><br /> <input type="text" name="user_referred_by" id="user_referred_by" class="input" value="<?php echo esc_attr(stripslashes($user_referred_by)); ?>" size="25" /></label> </p> <?php } //3. Finally, save our extra registration user meta. add_action('user_new_form', 'myplugin_user_register'); function myplugin_user_register ($user_id) { if ( isset( $_POST['user_referred_by'] ) ) update_user_meta($user_id, 'user_referred_by', $_POST['user_referred_by']); }
и снова пустая meta-value
или я где-то ошибку допускаю?
или я где-то ошибку допускаю?
Ага. Вы оба обработчика повесили на один хук )
Выходит, один нужно убрать…. но который? и в каком месте?
из add_action(‘user_new_form’, ‘myplugin_user_register’);
бросить
function myplugin_user_register ($user_id) { if ( isset( $_POST['user_referred_by'] ) ) update_user_meta($user_id, 'user_referred_by', $_POST['user_referred_by']); }
в add_action(‘user_new_form’,’myplugin_register_form’);
так? или я снова ошибаюсь?нет, судя по тому, что не работает — я изрядно ошибаюсь…
Не торопитесь. Давайте мыслить логически. Поле ввода где? В форме. Цепляем вывод на хук register_form. Обработка где? После регистрации. Функцию с добавлением user_meta цепляем на user_register. Всё.
add_action('register_form','myplugin_register_form'); function myplugin_register_form (){ ?> <p> <label for="first_name">Реф.код<br /> <input type="text" name="user_referred_by" id="user_referred_by" class="input" value="<?php echo esc_attr(wp_unslash($_POST['user_referred_by'])); ?>" size="25" /></label> </p> <?php } add_action( 'user_register', 'myplugin_registration_save'); function myplugin_registration_save( $user_id ) { if ( isset( $_POST['user_referred_by'] ) ) update_user_meta($user_id, 'user_referred_by', $_POST['user_referred_by']); }
Где-то так. Если не так, то вставляем отладочный вывод и смотрим, что не так пошло.
хм… но у меня /wp-admin/user-new.php там как-то иначе должно быть…
и исходя из его содержимого
<?php /** This action is documented in wp-admin/user-new.php */ do_action( 'user_new_form', 'add-new-user' ); ?>
получается, что мой первый обработчик «user_new_form», а вот второй….
может бытьcreate-user
?
- Тема «переменная будущего ID пользователя (wp-admin/user-new.php)» закрыта для новых ответов.