Здравствуйте друзья, давно здесь не был ) . В общем в чем заключается проблема, я опишу начав из описания задачи.
На сайте установлен плагин 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 и все данные получил.