Посмотреть все похожие вопросы, но не нашел ответа, да и код отличается. Собственно, пытаюсь в WP при отправке формы отправить письмо, создать пользователя, от его имени пост и комментарий к посту. Код следующий:
<?php if (isset($_GET['submitted'])) {
$contact_name = $_GET['contact_name'];
$contact_name = htmlspecialchars($contact_name);
$contact_name = trim($contact_name);
$contact_phone = $_GET['contact_phone'];
$contact_phone = htmlspecialchars($contact_phone);
$contact_phone = trim($contact_phone);
$contact_email = $_GET['contact_email'];
$contact_email = htmlspecialchars($contact_email);
$contact_email = trim($contact_email);
$text = $_GET['text'];
$text = htmlspecialchars($text);
$text = trim($text);
mail("ivan.mv46@gmail.com", "Новое сообщение", "Имя:".$contact_name."\nEmail: ".$contact_email."\nНомер телефона: ".$contact_phone."\nСообщение:".$text."");
$user_id = wp_create_user( $contact_name, 'password', $contact_email );
$post_meta = array(
'post_author' => $user_id,
'post_title' => $contact_name,
'post_content' => 'Нет',
'post_status' => 'publish',
'post_type' => 'clients'
);
$post_id = wp_insert_post( $post_meta );
add_post_meta($post_id, 'object_types', 'Не добавлено', true);
add_post_meta($post_id, 'area', 'Не добавлено', true);
add_post_meta($post_id, 'adress', 'Не добавлено', true);
add_post_meta($post_id, 'client_phone', $contact_phone, true);
$data = array(
'comment_post_ID' => $post_id,
'comment_author' => $user_id,
'comment_content' => $text,
'comment_date' => date('d-m-Y'),
'comment_approved' => 1,
);
wp_insert_comment( $data );
echo "Спасибо, ваше сообщение отправлено. Скоро мы свяжемся с вами.";
wp_redirect( home_url() );
exit;
} ?>
<form class="single_contact_form flex_cc main_bg">
<input type="text" placeholder="Ваше имя" name="contact_name" required>
<input type="tel" placeholder="Номер телефона" name="contact_phone" required pattern="(\+?\d[- .]*){7,13}" title="Международный, государственный или местный телефонный номер">
<input type="email" placeholder="Email" name="contact_email" required>
<textarea name="text" id="text" cols="30" rows="6"></textarea>
<input type="hidden" name="submitted" value="1">
<input type="submit" value="Отправить">
</form>
Код работает, письмо приходит и все остальное тоже выполняется. Но после на странице я вижу следующее:
Warning: mysqli_real_escape_string() expects parameter 2 to be string, object given in .../wp-includes/wp-db.php on line 1171
Warning: mysqli_real_escape_string() expects parameter 2 to be string, object given in .../wp-includes/wp-db.php on line 1171
Спасибо, ваше сообщение отправлено. Скоро мы свяжемся с вами.
Warning: Cannot modify header information - headers already sent by (output started at .../header.php:1) in /wp-includes/pluggable.php on line 1195
Вижу тут две ошибки.
Warning: mysqli_real_escape_string()
возникает из-за того, что в качестве $user_id
в wp_insert_comment()
передается объект WP_Error
, который возвращает wp_create_user()
в том случае, когда пользователь с таким email уже существует.
Warning: Cannot modify header information
- из-за того, что нельзя делать никакой вывод на страницу до wp_redirect()
. Эта функция использует php-функцию header, почитайте о ней здесь.
Даже если вы уберете echo из своего кода, вторая ошибка все равно будет возникать из-за вывода на страницу первого сообщения об ошибке.
UPDATE
Чтобы не возникала первая ошибка, проверяйте, есть ли уже такой пользователь перед созданием:
$user = get_user_by('email', $contact_email);
if ( ! $user ) {
$user_id = wp_create_user( $contact_name, 'password', $contact_email );
} else {
$user_id = $user->ID;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть самописный POS для аптек на PHPИ тут чтоб кассир не смог продавать больше чем количество препарата которая есть на складе делаю так
Сделал добавление видео на сайт, файлы загружаются в ту папку, которую я указалВ базу данных я заношу имя файла, размер, тип
Всем привет! Прошу помочь в поиске решения проблемы! Есть сервер WS 2012 R2 magento 19
Здравствуйте! Пишу не большой сайт на Laravel 54, на нем имеется аутентификация через oAuth 2