@Rokis
Не стыдно спрашивать, стыдно не пытаться...

Как сделать обратную связь в админку Wordpress?

Здравствуйте.

Предположим у меня есть 2 формы:

<form class="first" action="#" method="POST">			
		<h4>Feedback</h4>
		<p>
			<label for="name">Name*</label>
			<input type="text" name="name" value="" size="40" id="name" class="input-form" aria-required="true" aria-invalid="false">
		</p>
		<p>
			<label for="email">Email*</label>
			<input type="email" name="name" value="" size="40" id="email" class="input-form" aria-required="true" aria-invalid="false">
		</p>
		<p>
			<label for="title-feedback">Message subject*</label>
			<input type="text" name="name" value="" size="40" class="input-form" id="title-feedback" aria-required="true" aria-invalid="false">
		</p>
		<textarea name="msg" id="msg" class="textarea" placeholder="Your message ..."></textarea>
		<p><input type="submit" class="submit" value="Send"></p>
	</form>

и
<form class="next" action="#" method="POST">			
		<h4>С какой проблемой вы столкнулись?</h4>
		<p>
			<input type="radio" id="no_file" class="checkbox" name="item">
			<label for="no_file">В архиве не хватает файлов.</label>
		</p>
		<p>
			<input type="radio" id="no_load" class="checkbox" name="item">
			<label for="no_load">Не скачивается.</label>
		</p>
		<p>
			<input type="radio" id="my" class="checkbox" name="item">
			<label for="my">Своё решение:</label>
		</p>
		<textarea name="msg" id="msg" class="textarea" placeholder="опишите проблему..."></textarea>
		<p><input type="submit" class="submit" value="Сообщить!"></p>
	</form>


Как сделать так, чтобы данные из этих форм отправлялись не на email, а в административную панель Wordpress? Нужно просто получать информацию в виде текста и возможность удалять её, подобно стандартным комментариям.

В гугле из подобного нашёл только способ с помощью плагинов Contact Form 7 + Flamingo. Как ещё это можно сделать?
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 2
@kayart
Форма контактов -> пользователь пишет сообщение -> сообщение отправляется в специально подготовленную табличку в базе данных -> в админ-панели шлете запрос на получение записей из таблички -> выводите записи -> читаете записи -> удаляете записи из таблички при необходимости
Ответ написан
Комментировать
4mobile
@4mobile
WEB developer
Я делал подобное для отзывов.
Создал тип записей "отзывы".
Форма Contact Form 7 - вместо отправки отзыва с сайта на емейл, через хук добавлял запись "отзыв" с пометкой "черновик".
Потом в админке можно смотреть и публиковать нормальные отзывы.
138 - id формы
Правда у меня еще использовался ACF и возможность с формы загружать фото - без этого можно сократить код в половину.

add_action('wpcf7_before_send_mail', 'send_mail');
function send_mail($form){
    global $wpdb;
    $submission = WPCF7_Submission::get_instance();
    if ( $submission && 138 == $form->id() ) {
        $form->skip_mail = true;
        $submited = array();
        $submited['title'] = $form->title();
        $submited['posted_data'] = $submission->get_posted_data();
        $uploadedFiles = $submission->uploaded_files();
        $data_name  = $submited['posted_data']['nm'];
        $data_tel = $submited['posted_data']['tel'];
        $data_mail = $submited['posted_data']['mail'];
        $data_msg = $submited['posted_data']['msg'];
        }

        $new_post = array(
            'post_title' => 'Отзыв о леcтнице',
            'post_type'=>'review',
            'post_status'=>'draft',
            'post_content'=>$data_msg
        );
        $post_id = wp_insert_post($new_post);
        if ($post_id) {
            if ($data_name) update_field('reviews_name',$data_name,$post_id);
            if ($data_tel) update_field('reviews_tel',$data_tel,$post_id);
            if ($data_mail) update_field('reviews_email',$data_mail,$post_id);
            $arrImg = array();
            foreach ($uploadedFiles as $value) {
                $file = $value;
                $filename = basename($file);
                $upload_file = wp_upload_bits($filename, null, file_get_contents($file));
                if (!$upload_file['error']) {
                    $wp_filetype = wp_check_filetype($filename, null );
                    $attachment = array(
                        'post_mime_type' => $wp_filetype['type'],
                        'post_parent' => $post_id,
                        'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
                        'post_content' => '',
                        'post_status' => 'inherit'
                    );
                    $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $post_id );
                    if (!is_wp_error($attachment_id)) {
                        require_once( ABSPATH . 'wp-admin/includes/image.php' );
                        $attach_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
                        wp_update_attachment_metadata( $attachment_id, $attach_data );
                        $arrImg[] = $attachment_id;
                    }
                }
            }
            if (count($arrImg) > 0) {
                update_field('reviews_img', $arrImg, $post_id );
            }
        }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы