Здравствуйте!
Знаю, звучит это все глупо, ибо я уже подымал этот вопрос на форуме и вроде нашли решение да не полностью...
Задача такова - после того как пользователь заполнил все поля формы регистрации (в ней не только стандартные поля логин и пароль а еще и дополнительные есть) все эти данные нужно отправить на нужный email (а в будущем мне нужно будет сделать так чтоб они отправлялись в CRM-ку).
То что я опишу ниже я пишу не с целью кого-то обвинить, а с целью показать что я сделал все что мог и уже от безысходности прошу подсказки
По началу я долго пытался сделать это через код php в function.php . Пол дня мучался и не получилось... Тогда Андрей посоветовал следующий код:
add_action('user_register', 'rcl_send_user_data_to_mail', 10); function rcl_send_user_data_to_mail($user_id){ $admin_email = 'почта@админа.ru'; // укажите почту админа $subject = 'Данные нового пользователя'; // заголовок письма $textmail = '<p>На вашем сайте новый юзер. его ID = '.$user_id.'</p>'; $textmail .= '<p>Данные указанные при регистрации</p>'; foreach($REQUEST as $k => $val){ $textmail .= '<p>'.$k.' => '.$val.'</p>'; } rcl_mail($admin_email, $subject, $textmail); }
Этот код отправлял данные, но только ID пользователя.
Я нашел как это сделать через доработку файла register.php - сделал так чтоб все поля отсылались в письме пользователю и потом просто указывал чтоб такое же письмо отправлялось менеджеру. Система работала, но потом оказалось что этот файл не "template" и он затирается:)
Потом я решил попробовать реализовать это через добавление кода в файл form-register.php , что я только не пробовал... я перечитал кучу статей и вп-камы и блога вп-риколл и блога вордпресса, вот ниже код некоторых из моих последних попыток:
$all_meta_for_user = get_user_meta( $user_id ); global $user_ID; $user_log = $all_meta_for_user['last_name']; $user_logs = $all_meta_for_user[1]; $user_email = get_user_meta( $user_id, 'first_name', true); $password = get_user_meta($user_id, $key = 'last_name', $single = false); $admin_email = 'maestro300107@gmail.com'; $to = 'maestro300107@gmail.com' . ', '; $subject = 'Письмо с моего сайта'; $message = $_POST['last_name'] . '<br />' . $_POST['last_name'] . '<br />' . $password . $user_log . 'hello' . '<br />' . $_POST['user_login']; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $textmail = '<p>На вашем сайте новый юзер. его ID = '.$_POST['last_name']. $user_log. $user_email. 'hello'. $password . $user_logs.'</p>'; mail($to, $subject, $message, $headers); rcl_mail($admin_email, $subject, $textmail);
то есть в этом хаотичном коде я пытался найти способ - КАК ЖЕ ПЕРЕДАТЬ и отправить через email данные введенные пользователем.
Ничего не получилось... email отправлялся но данные не передавались. я никак не могу понять КАК ЖЕ ИСПОЛЬЗОВАТЬ ЭТОТ meta-key? чтоб по email отправить введенные пользователем в него данные... я пробовал и get_user_meta() и прочее...
Хух!
Если кто-то подскажет что я делал не правильно и где же правильный ответ то я буду безмерно благодарен!
в моем коде ошибка, надо привести эту часть к виду
foreach($_REQUEST as $k => $val){
$textmail .= $k . ' => ' . $val;
}
тогда кроме ИД пользователя будут высылаться все данные введенные в регистрационную форму, правда без человеческих наименований полей, но можно походу доработать.
Андрей CS сказал(а)
в моем коде ошибка, надо привести эту часть к видуforeach($_REQUEST as $k => $val){
$textmail .= $k . ' => ' . $val;
}тогда кроме ИД пользователя будут высылаться все данные введенные в регистрационную форму, правда без человеческих наименований полей, но можно походу доработать.
Спасибо Андрей:)!!!!
Да, все работает, на этот раз полностью:)
Я вот так реализовал чтоб оно красиво выглядело:
add_action('user_register', 'rcl_send_user_data_to_mail', 10); function rcl_send_user_data_to_mail($user_id){ $admin_email = 'maestro300107@gmail.com'; // укажите почту админа $subject = 'Данные нового пользователя'; // заголовок письма foreach($_REQUEST as $k => $val){ $last_name = $_POST['last_name']; $new_tabs_r_57 = $_POST['new_tabs_r_57']; $user_email = $_POST['user_email']; $user_login = $_POST['user_login']; $textmail = '<p>На сайте зарегистрировался новый пользователь! Данные указанные при регистрации: </p>'; $textmail .= '<p>Логин = '.$user_login.'</p>'; $textmail .= '<p>Email = '.$user_email.'</p>'; $textmail .= '<p>Номер телефона = '.$last_name.'</p>'; $textmail .= '<p>День рождения = '.$new_tabs_r_57.'</p>'; } rcl_mail($admin_email, $subject, $textmail); }
Я так понял что вся магия была в - $_REQUEST , Ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE .
Но вот не совсем понял что делает вот этот код 'as $k => $val'
Да уж... я твердо понял что нужно учить php:) Может посоветуете хорошие источники или бесплатные курсы? Разных курсов и программ по изучению php в интернете огромная туча, но вот какие из них хорошие я не знаю.
Владимир (Otshelnik-Fm) сказал(а)
SergeyNet сказал(а)
Но вот не совсем понял что делает вот этот код 'as $k => $val'SergeyNet сказал(а)
Может посоветуете хорошие источники или бесплатные курсы?доки же
Вы не можете просматривать опубликованные ссылки
Спасибо Владимир! да действительно все понятно описано.
Это уже не тема топика, а просто личный вопрос - есть два мнения по поводу того как лучше изучать php:
1) Нужно изучить некую "базу-основу" php а уже потом браться за реализацию разных задач по php.
2) Лучшее изучение это практика и нужно сразу брать и стараться делать.
Вы какого из них придерживаетесь? Или может у вас есть третье?
Я раньше думал что лучше 2) вариант. Но! то как я несколько дней "мудохался" над элементарной задачей и так и не смог ее сам решить - это показывает что есть доля истины и в варианте 1)
Базу - да. Ты должен понимать 100% - что такое массивы и объекты, синтаксис (банально в скобках можно запутаться по первости), условия, циклы, конкатенация - это база. Если есть - то всё остальное уже не так страшно.
А потом я за вариант когда тебе надо в вордпресс что-то сделать и ты параллельно учишь php и апи вордпресс. Ну и js с mysql - куда уж без них.
Ну и важно знать терминологию - т.к. поиск гугла любит точные фразы. И умение гуглить на английском. Только на нём. А там открываешь 3 темы на стековерфлоу и из 3х кусков кода делаешь свой.
Я через это прошел (ох я говнокодил - у меня есть файл функций 2009-го года - я его оставил на память. Вот там жжесть...). Не сказать что я гуру php - но решать быстро вопросы умею. Хотя перфекто в итоге меня замедляет. Это касается всего фронтенда.
Ну а потом еще подключаешь в IDE форматирование, кодстайл - чтобы если кто заглянет внутрь - ужас бы от прыгающих скобок не испытал. Подключаешь гит. Ну а взрослое: ООП - это по вкусу. Не всегда классы нужны в реализации простой задачи. Хотя очень часто класс помогает не делать кучу запросов к бд и не костылять обходя это через глобальные переменные. Если пошел выборку из БД писать в глобальные - пора перенести это в класс. Такая дичь тоже была. Потом лень по изучению ООП прогнал и подружился))
Мне например оказалось неинтересно делать мифические вещи по учебнику на чистом php. Да читал - повторял, но не 100%. Это путь для академиков))
Ну отдельно конечно ты должен уметь дебажить. Сверху вниз, построчно. Проверяя каждый шаг. Уметь дебажить ajax - т.к. с ним в ВП часто много работы.
приведите код свой к такому виду
add_action('user_register', 'rcl_send_user_data_to_mail', 10); function rcl_send_user_data_to_mail($user_id){ $admin_email = 'maestro300107@gmail.com'; // укажите почту админа $subject = 'Данные нового пользователя'; // заголовок письма $last_name = $_POST['last_name']; $new_tabs_r_57 = $_POST['new_tabs_r_57']; $user_email = $_POST['user_email']; $user_login = $_POST['user_login']; $textmail = '<p>На сайте зарегистрировался новый пользователь! Данные указанные при регистрации: </p>'; $textmail .= '<p>Логин = '.$user_login.'</p>'; $textmail .= '<p>Email = '.$user_email.'</p>'; $textmail .= '<p>Номер телефона = '.$last_name.'</p>'; $textmail .= '<p>День рождения = '.$new_tabs_r_57.'</p>'; rcl_mail($admin_email, $subject, $textmail); }
а то у вас содержимое письма в цикле формируется, что совсем не требуется.
Андрей CS сказал(а)
приведите код свой к такому виду
add_action('user_register', 'rcl_send_user_data_to_mail', 10); function rcl_send_user_data_to_mail($user_id){ $admin_email = 'maestro300107@gmail.com'; // укажите почту админа $subject = 'Данные нового пользователя'; // заголовок письма $last_name = $_POST['last_name']; $new_tabs_r_57 = $_POST['new_tabs_r_57']; $user_email = $_POST['user_email']; $user_login = $_POST['user_login']; $textmail = 'На сайте зарегистрировался новый пользователь! Данные указанные при регистрации: '; $textmail .= 'Логин = '.$user_login.' '; $textmail .= 'Email = '.$user_email.' '; $textmail .= 'Номер телефона = '.$last_name.' '; $textmail .= 'День рождения = '.$new_tabs_r_57.' '; rcl_mail($admin_email, $subject, $textmail); }
а то у вас содержимое письма в цикле формируется, что совсем не требуется.
Да, вы правы! Работает и без foreach($_REQUEST as $k => $val). Аж немного обидно:) Можно было бы и самому до этого додуматься. Короче точно, начинаю изучать php:)
Владимир (Otshelnik-Fm) сказал(а)
Базу - да. Ты должен понимать 100% - что такое массивы и объекты, синтаксис (банально в скобках можно запутаться по первости), условия, циклы, конкатенация - это база. Если есть - то всё остальное уже не так страшно.А потом я за вариант когда тебе надо в вордпресс что-то сделать и ты параллельно учишь php и апи вордпресс. Ну и js с mysql - куда уж без них.
Ну и важно знать терминологию - т.к. поиск гугла любит точные фразы. И умение гуглить на английском. Только на нём. А там открываешь 3 темы на стековерфлоу и из 3х кусков кода делаешь свой.
Я через это прошел (ох я говнокодил - у меня есть файл функций 2009-го года - я его оставил на память. Вот там жжесть...). Не сказать что я гуру php - но решать быстро вопросы умею. Хотя перфекто в итоге меня замедляет. Это касается всего фронтенда.
Ну а потом еще подключаешь в IDE форматирование, кодстайл - чтобы если кто заглянет внутрь - ужас бы от прыгающих скобок не испытал. Подключаешь гит. Ну а взрослое: ООП - это по вкусу. Не всегда классы нужны в реализации простой задачи. Хотя очень часто класс помогает не делать кучу запросов к бд и не костылять обходя это через глобальные переменные. Если пошел выборку из БД писать в глобальные - пора перенести это в класс. Такая дичь тоже была. Потом лень по изучению ООП прогнал и подружился))Мне например оказалось неинтересно делать мифические вещи по учебнику на чистом php. Да читал - повторял, но не 100%. Это путь для академиков))
Ну отдельно конечно ты должен уметь дебажить. Сверху вниз, построчно. Проверяя каждый шаг. Уметь дебажить ajax - т.к. с ним в ВП часто много работы.
Спасибо Владимир! Я люблю когда есть конкретные цели. Из вашего совета я понял что по теории мне нужно хорошо изучить такие темы:
- Массивы
- Объекты
- Условия
- Циклы
- Конкатенация
- Синтаксис
Ну и наверное тему функции тоже нужно изучить. Вот и чудненько! Чудненько что общекосмическая фраза "изучить php" обретает для меня конкретный вид.