Главная WordPress WordPress: Вопросы и ответы Как захватить во время регистрации мета поля (созданные wp-recall) только что зарегистрировавшегося пользователя?
22 ответ(ов) в теме
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
1
14:21

Здравствуйте друзья, давно здесь не был ) . В общем в чем заключается проблема, я опишу начав из описания задачи.

На сайте установлен плагин JoomSport плагин не плохо справляется со своими задачами и в общем всем устраивает. Но игроки (которые создаются при помощи плагина JoomSport) фактически не являются пользователями WordPress, а являются как бы простым типом записей. Дак вот, мне необходимо реализовать регистрацию игроков, что как бы не совсем вяжется (ну не чего нового в специфике нашей деятельности - в большинстве случаев приходится связывать не связуемое :) ). Для решения данной задачи я написал (ну написал как бы инет я названия переменных поменял) данную функцию:

// Добавляем игрока на основе введенных данных регистрирующимся пользователем
// https://wp-kama.ru/hook/user_register
add_action( 'user_register', 'add_new_players_to_joomsport_plagun', 10, 1 );
				// Захватываем ID зарегистрировавшегося пользователя
				// $firstname = get_user_meta($user_id,'first_name',true);
				//Here you can update user information after they registered
function add_new_players_to_joomsport_plagun( $user_id ) {
		    if ( isset( $_POST['first_name'] ) ) {
		        update_user_meta($user_id, 'first_name', $_POST['first_name']);
		        update_user_meta($user_id, 'last_name', $_POST['last_name']);
		    };
		$user_info = get_userdata($user_id);
		$user_meta_info = get_user_meta($user_id);

	  $username = $user_info->user_login;
	  $first_name = $user_info->first_name;
	  $last_name = $user_info->last_name;
		
		    $my_post = array(
		        'post_title' => $username,
		        'post_content' => $last_name.' '. $first_name .' '.$Otchestvo_name,
		        'post_status' => 'publish',
		        'post_author' => 1, //If to assign post to the currently registered user otherwise put 1
		        'post_type' => 'post'
		    );

		    // Insert the post into the database
		    $_post_id = wp_insert_post($my_post);
		    if ($_post_id) {
		        return 'post inserted';
		    }
};

Что делает данная функция? Она создает запись (ну это для тестинга, в будущем она будет создавать кастом тайп "Player") в произвольные поля которой будут вставлены данные регистрирующегося пользователя.

Теперь самое интересное, как бы я не пробовал у меня не получается захватить мета данные которые введены в meta поля зарегистрировавшего пользователя (meta key проверен все верно). Прошу помощи так как порчено много времени, но результата пока не добился. У меня возникает ощущение что функция пытается захватить мета поля которых как бы еще нет. Всем ответившим огромное спасибо.

Редакции сообщения
22.10.2018 14:38Андрей CSПричина: не указано
22.10.2018 14:39Андрей CSПричина: не указано
0
Андрей CS
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 10846
2
14:42

все метаданные можно получить из массива $_POST, тк они были отправлены из формы, использование функций get_userdata() и get_user_meta(), скорее всего, неверно, да и не требуется.

1
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
3
14:47

Елки палки как все просто... Очень благодарен, да и код я не удачный сбросил... Большое спасибо Андрей!

0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
4
16:16

Я где-то упорно туплю, подскажите пожалуйста как мне захватить изображение загруженное при регистрации. В мета ключе установлен rcl_avatar. $_POST['rcl_avatar'] и разные *_get чего-то не срабатывают.

0
Otshelnik-Fm
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 12420
5
16:25

Вы проверьте что у вас в $_POST содержится - а потом уже ['rcl_avatar'] и прочие смотрите. Если его нет в $_POST - смысл в конструкции $_POST['rcl_avatar'] ?

Редакции сообщения
22.10.2018 16:26Otshelnik-FmПричина: не указано
0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
6
17:07

Ошельник, спасибо за Ваш ответ. Дело в том что данная функция так волшебна что я не могу захватить и вывести var_dump или принт. ТО есть по факту я как бы подбираю значение для переменной.

Я могу без проблем захватить текстовые поля. Но поля с файлом и чекбоксы я захватить не могу не как.

Редакции сообщения
22.10.2018 17:09dydaevskiyПричина: не указано
0
Otshelnik-Fm
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 12420
7
17:21

Посмотрите этот MU плагин под ВП

Вы не можете просматривать опубликованные ссылки

- он помогает дебажить с остановкой или писать прям в логи сервера (например дебажить ajax)

XHR запросы видно в панели разработчика в браузере - вкладка сеть.

1
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
8
17:36

Очень даже весьма круто! Спасибо! Буду рыть дальше.

0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
9
17:59

Отшельник, Ваш плагин просто какое-то чудо дивное :). Спасибище без размерное!

0
Otshelnik-Fm
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 12420
10
18:02

Спасибо. Так у вас получилось распечатать и увидеть то что нужно?

0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
11
18:03

Да я увидел, что нет там не фига ссылок на загруженные во время регестрации пользователем изображения. Чешу репу как выцепить эти ссылки на изображения.

0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
12
18:04

И вот где мне его "rcl_avatar" искать уже голова не соображает.

0
Otshelnik-Fm
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 12420
13
18:16

А хук user_register что вы используете - разве не возвращает все метаполя юзера?

Вот еще фильтр можно посмотреть

Вы не можете просматривать опубликованные ссылки

"rcl_avatar" - обычное метаполе юзера:

Вы не можете просматривать опубликованные ссылки

id юзера есть у вас? Получить ссылку на аву не сложно значит

0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
14
19:20

ddd(get_user_meta($user_id,'rcl_avatar',1)); получаю boolFALSE

ddd($_POST) есть почти все но без ссылок:

$_POST array(22)
'user_login' => string(10) "test223e23"
'user_email' => string(30) "wdwdwdhenko@com.ua"
'user_pass' => string(6) "112341343432342"
'user_secondary_pass' => string(6) "1eewffwefwefewfwef"
'last_name' => string UTF-8(8) "Фамилия"
'first_name' => string(6) "Имя"
'Otchestvo_name' => string UTF-8(10) "Отчество"
'rcl_birthday' => string(10) "2018-10-18"
'Player_Mesto_Rogdeniya' => string(8) "erfeferf"
'Player_Sity' => string(5) "erfrf"
'Player_Oblast' => string(10) "erfrfwwwde"
'Player_Index' => string(6) "234432"
'Player_Address' => string(8) "efe2fwef"
'Player_phone' => string(0) ""
'Player_Trener_FIO' => string(9) "wewwdedwe"
'Player_Trener_Phone' => string(10) "wededewdwe"
'Player_vozrast_nachala' => string(1) "2"
'Player_club' => string(5) "wedwe"
'submit-register' => string UTF-8(18) "Зарегистрироваться"
'register_wpnonce' => string(10) "f32207ee3f"
'_wp_http_referer' => string(15) "/registratsiya/"
'redirect_to' => string(41) "https://test3.test.loc/registratsiya/"

Редакции сообщения
22.10.2018 19:20dydaevskiyПричина: не указано
0
Preci
На сайте с 11.11.2014
Участник
Тем 55
Сообщения 545
15
19:49

А как аватар загружается? Плагином

Вы не можете просматривать опубликованные ссылки
0
Otshelnik-Fm
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 12420
16
19:53

получаю boolFALSE

где получаете? Использовали ли вы фильтр что я указал?

Постарайтесь объяснить что вы хотите сделать - я потерял нить.

0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
17
20:39

Отшельник огромное спасибо за Ваше время (и уже наверное нервы).
Итак, имею следующую функцию:

<?php 
// https://wp-kama.ru/hook/user_register
add_action( 'user_register', 'add_new_players_to_joomsport_plagun', 10, 1 );

				// Захватываем ID зарегистрировавшегося пользователя
function add_new_players_to_joomsport_plagun( $user_id ) {

			    if ( isset( $_POST['first_name'] ) ) {
					// Обновляем данные в профиле пользователя
		        update_user_meta($user_id, 'first_name', $_POST['first_name']);
		        update_user_meta($user_id, 'last_name', $_POST['last_name']);
		        update_user_meta($user_id, 'Otchestvo_WP', $_POST['Otchestvo_name']);

			    };



		// Фамилия
	  $first_name = $_POST['first_name'];
		// Имя
		$last_name = $_POST['last_name'];
		// Отчество
	  $Otchestvo_name = $_POST['Otchestvo_name'];
		// Ваше фото
	  // $rcl_avatar = $username_test;
	  // $rcl_avatar = $_POST['rcl_avatar'];

		// $avatar_data = get_user_meta($user_id,'rcl_avatar',1);
	  // $rcl_avatar = wp_get_attachment_image_src($avatar_data);

		// $rcl_avatar = var_dump($_POST);

		// Ксерокопия свидетельства о рождении или паспорта
	  $Copy_pasport_kod = $_POST['Copy_pasport_kod'][0];
		// День Рождения
	  $rcl_birthday = $_POST['rcl_birthday'];
		// Место рождения
	  $Player_Mesto_Rogdeniya = $_POST['Player_Mesto_Rogdeniya'];
		// Ваш пол
	  $Player_Mesto_Rogdeniya = $_POST['Player_pol'][0] ;
		// Резиденция. Город
	  $Player_Sity = $_POST['Player_Sity'];
		// Резиденция. Область
	  $Player_Oblast = $_POST['Player_Oblast'];
		// Почтовый индекс
	  $Player_Index = $_POST['Player_Index'];
		// Адрес проживания (улица, дом, квартира)
	  $Player_Address = $_POST['Player_Address'];
		// Тренер - Фамилия, Имя, Отчество
	  $Player_Trener_FIO = $_POST['Player_Trener_FIO'];
		// Контактный телефон тренера
	  $Player_Trener_Phone = $_POST['Player_Trener_Phone'];
		// Какой рукой играете
	  $Player_hends = $_POST['Player_hends'][0] ;
		// Любимое покрытие
	  $Player_Pokrutie = $_POST['Player_Pokrutie'];
		// Возраст, в котором начали заниматься теннисом
	  $Player_vozrast_nachala = $_POST['Player_vozrast_nachala'];
		// Теннисный клуб, спортивная школа
	  $Player_club = $_POST['Player_club'];


		// Контент записи для проверки переменных
		// $Content_Player = ;
		$Content_Player = $Content_Player.'<br><b>// Фамилия </b><br>';
		$Content_Player = $Content_Player.' '.$last_name.'<br><b>// Имя </b><br> '. $first_name .'<br><b>// Отчество </b><br> '.$Otchestvo_name .'<br><b>// Ваше фото </b><br> '.$rcl_avatar.'<b><br>// Ксерокопия свидетельства о рождении или паспорта </b><br> '.  $Copy_pasport_kod .'<br><b>// День Рождения </b><br>'. $rcl_birthday;
		$Content_Player = $Content_Player.'<br><b>// Место рождения </b><br>'.$Player_Mesto_Rogdeniya.'<br><b>// Резиденция. Город </b><br>'.$Player_Sity.'<br><b>// Резиденция. Область </b><br>'.$Player_Oblast.'<br><b>// Почтовый индекс </b><br>'. $Player_Index.'<br><b>// Адрес проживания (улица, дом, квартира) </b><br> '.$Player_Address.'<br><b>// Тренер - Фамилия, Имя, Отчество </b><br>'.$Player_Trener_FIO;
		$Content_Player = $Content_Player.'<br><b>// Контактный телефон тренера</b> <br> '.$Player_Trener_Phone.'<br><b>// Какой рукой играете </b><br>'.$Player_hends.'<br><b>// Любимое покрытие </b><br>'.$Player_Pokrutie.'<br><b>// Возраст, в котором начали заниматься теннисом </b><br>'.$Player_vozrast_nachala.'<br><b>// Теннисный клуб, спортивная школа </b><br>'.$Player_club;

		    $my_post = array(
		        'post_title' => $last_name.' '. $first_name .' '.$Otchestvo_name,
		        'post_content' => $Content_Player,
		        // 'post_content' => $_POST(array),
		        'post_status' => 'publish',
		        'post_author' => 1, //If to assign post to the currently registered user otherwise put 1
		        'post_type' => 'post'
		    );

		    // Вставляем запись в базу данных
		    $_post_id = wp_insert_post($my_post);
		    if ($_post_id) {
		        return 'post inserted';
		    }


};

 ?>

Все отлично, но мне необходимо получить ссылки на файлы которые пользователь загрузил при регистрации. А точнее мне нужны ссылки из мета полей:
rcl_avatar и Copy_pasport_kod.

У меня стойкое ощущение что в момент когда исполняется функция, файлы или еще не загружены, или я не знаю что еще может быть.

Редакции сообщения
22.10.2018 20:39dydaevskiyПричина: не указано
22.10.2018 20:40dydaevskiyПричина: не указано
22.10.2018 20:41dydaevskiyПричина: не указано
22.10.2018 20:43dydaevskiyПричина: не указано
22.10.2018 20:44dydaevskiyПричина: не указано
22.10.2018 20:45dydaevskiyПричина: Сори не сразу вставил верный код
0
Preci
На сайте с 11.11.2014
Участник
Тем 55
Сообщения 545
18
21:26

Файлы при регистрации находятся в $_FILES и они попадают во временную папку на сервере, а после реги юзера с помощью rcl_update_profile_fields уже файлы загружаются в библиотеку wordpress и привязываются к юзеру.

Как вариант можно вместо user_register использовать wp_login - он так же передает ID юзера но срабатывает после логина юзера, а значит все файлы уже в библиотеке и мета поля созданы.

1
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
19
21:34

Большущее Вам спасибо! Я совсем не подумал о $_FILES. Еще раз спасибо.

0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
20
21:34

Оффтоп

0
Otshelnik-Fm
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 12420
21
21:36

Вот я продебажил каждый шаг при регистрации, загрузил в форму картинку background.jpg:

add_action( 'user_register', 'add_new_players_to_joomsport_plagun', 50, 1 );
function add_new_players_to_joomsport_plagun( $user_id ) {
    vdl($user_id);
        $img = get_user_meta($user_id,'s_41',1);
    vdl($img);
        $img_src = wp_get_attachment_url($img);
    vdl($img_src);
};

и вот что в логах:

[Mon Oct 22 21:32:51 2018] 137, referer:
[Mon Oct 22 21:32:51 2018] 3909, referer:
[Mon Oct 22 21:32:51 2018] http://test-recall.otshelnik-fm.ru/wp-content/uploads/2018/10/background.jpg, referer:

замечу что я поднял время выполнения хука - 50 и все данные получил.

Редакции сообщения
22.10.2018 21:36Otshelnik-FmПричина: не указано
0
dydaevskiy
не в сети 3 недели
На сайте с 26.04.2016
Участник
Тем 24
Сообщения 138
22
21:54

Отшельник, спасибо Вам большое за потраченное на меня время. Вы как и раньше абсолютно правы. Спасибо.

0
Вы не имеете права на публикацию сообщений в этой теме