Поддержка Проблемы и решения переменная будущего ID пользователя (wp-admin/user-new.php)

Просмотр 15 ответов — с 1 по 15 (всего 21)
  • Модератор Yuri

    (@yube)

    Будущий — никакой. 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
    но никак не могу результативно собрать информацию воедино(

    Модератор Yuri

    (@yube)

    проблема в том, что он все равно почему-то записывает только в строки со стандартным кеем! т.е. добавить юзерку строку 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>

    но поле по-прежнему остается пустым(((

    Модератор Yuri

    (@yube)

    * дописал в 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

    или я где-то ошибку допускаю?

    Модератор Yuri

    (@yube)

    или я где-то ошибку допускаю?

    Ага. Вы оба обработчика повесили на один хук )

    Выходит, один нужно убрать…. но который? и в каком месте?

    из 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’);
    так? или я снова ошибаюсь?

    нет, судя по тому, что не работает — я изрядно ошибаюсь…

    Модератор Yuri

    (@yube)

    Не торопитесь. Давайте мыслить логически. Поле ввода где? В форме. Цепляем вывод на хук 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?

Просмотр 15 ответов — с 1 по 15 (всего 21)
  • Тема «переменная будущего ID пользователя (wp-admin/user-new.php)» закрыта для новых ответов.