Здравствуйте друзья, давно здесь не был ) . В общем в чем заключается проблема, я опишу начав из описания задачи.
На сайте установлен плагин 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 проверен все верно). Прошу помощи так как порчено много времени, но результата пока не добился. У меня возникает ощущение что функция пытается захватить мета поля которых как бы еще нет. Всем ответившим огромное спасибо.
Ошельник, спасибо за Ваш ответ. Дело в том что данная функция так волшебна что я не могу захватить и вывести var_dump или принт. ТО есть по факту я как бы подбираю значение для переменной.
Я могу без проблем захватить текстовые поля. Но поля с файлом и чекбоксы я захватить не могу не как.
А хук user_register что вы используете - разве не возвращает все метаполя юзера?
Вот еще фильтр можно посмотреть
"rcl_avatar" - обычное метаполе юзера:
id юзера есть у вас? Получить ссылку на аву не сложно значит
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/"
Отшельник огромное спасибо за Ваше время (и уже наверное нервы).
Итак, имею следующую функцию:
<?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.
У меня стойкое ощущение что в момент когда исполняется функция, файлы или еще не загружены, или я не знаю что еще может быть.
Файлы при регистрации находятся в $_FILES и они попадают во временную папку на сервере, а после реги юзера с помощью rcl_update_profile_fields уже файлы загружаются в библиотеку wordpress и привязываются к юзеру.
Как вариант можно вместо user_register использовать wp_login - он так же передает ID юзера но срабатывает после логина юзера, а значит все файлы уже в библиотеке и мета поля созданы.
Вот я продебажил каждый шаг при регистрации, загрузил в форму картинку 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 и все данные получил.