Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Plugin Name: Обратная связь
- */
- /**
- * Шорткод для вывода формы обратной связи.
- * @return string
- */
- function insert_feedback_form(){
- return getFeedbackForm();
- }
- add_shortcode('feedback', 'insert_feedback_form');
- /**
- * Подключение стилей
- */
- add_action( 'wp_enqueue_scripts', 'add_feedback_styles' );
- function add_feedback_styles() {
- wp_register_style( 'feedback.css', plugin_dir_url( __FILE__ ) . 'css/feedback.css' );
- wp_enqueue_style( 'feedback.css');
- }
- /**
- * Инициализация типа документа
- */
- add_action('init', 'create_feedback_post_type');
- function create_feedback_post_type() {
- //создание типа сущности
- register_post_type( 'feedback',
- array(
- 'labels' => array(
- 'name' => __('Feedback'),
- 'singular_name' => __('Feedback')
- ),
- 'public' => true,
- 'has_archive' => true,
- 'supports' => ['custom-fields']
- )
- );
- $fields = array_keys(feedbackFormInputs());
- $meta_args = array(
- 'type' => 'string',
- 'description' => 'A meta key associated with a string meta value.',
- 'single' => true,
- 'show_in_rest' => true,
- );
- foreach ($fields as $field_name) {
- register_post_meta('feedback', $field_name, $meta_args);
- }
- }
- function feedbackFormInputs() {
- return [
- 'feedback_name' => 'Имя',
- 'feedback_mail' => 'Адрес электронной почты',
- 'feedback_phone' => 'Номер телефона',
- 'feedback_type' => 'Способ получения сообщений',
- 'feedback_message' => 'Сообщение'
- ];
- }
- /**
- * Сохранение обратной связи
- * @param $feedback_data
- * @return array
- */
- function saveFeedback($feedback_data) {
- $response = [
- 'message' => '',
- 'status' => 'success'
- ];
- $fields = feedbackFormInputs();
- foreach ($fields as $field_code => $field_name) {
- if (empty($feedback_data[$field_code])) {
- $response['message'] = 'Поле "' . $field_name . '" обязательно для заполнения.';
- $response['status'] = 'error';
- }
- }
- if ($response['status'] == 'error') {
- return $response;
- }
- //сохранение сущности
- $meta_input = [];
- foreach (array_keys($fields) as $field_name) {
- if ($field_name == 'feedback_phone') {
- $feedback_data[$field_name] = preg_replace('/([^0-9])+/', '', $feedback_data[$field_name]);
- }
- elseif ($field_name == 'feedback_phone') {
- $feedback_data[$field_name] = preg_replace('/([^0-9])+/', '', $feedback_data[$field_name]);
- }
- $meta_input[$field_name] = $feedback_data[$field_name];
- }
- $post_data = [
- 'post_title' => 'Запись от ' . date('Y.m.d H:i:s'),
- 'post_type' => 'feedback',
- 'meta_input' => $meta_input
- ];
- try {
- $post_id = wp_insert_post($post_data);
- if ((int) $post_id > 0) {
- $response['message'] = 'Ваше обращение успешно сохранено';
- $response['status'] = 'success';
- }
- } catch (\Exception $e) {
- $response['message'] = $e->getMessage();
- $response['status'] = 'error';
- }
- return $response;
- }
- function getFeedbackFormData() {
- return [
- 'feedback_name' => '',
- 'feedback_mail' => '',
- 'feedback_phone' => '',
- 'feedback_type' => [
- 'mail_type' => '',
- 'sms_type' => '',
- 'whatsapp_type' => ''
- ],
- 'feedback_message' => ''
- ];
- }
- /**
- * Форма обратной связи
- * @return string
- */
- function getFeedbackForm() {
- $form = getFeedbackFormData();
- $fields = feedbackFormInputs();
- $notify = '';
- if (!empty($_POST)) {
- $form['feedback_name'] = sanitize_text_field($_POST['feedback_name']);
- $form['feedback_mail'] = sanitize_text_field($_POST['feedback_mail']);
- $form['feedback_phone'] = sanitize_text_field($_POST['feedback_phone']);
- $form_type = $_POST['feedback_type'];
- $feedback_types = [];
- foreach (['mail_type', 'sms_type', 'whatsapp_type'] as $type) {
- if (!empty($_POST['feedback_type'][$type])) {
- $feedback_types[] = substr($type, 0, -5);
- }
- }
- $form['feedback_type'] = implode(', ', $feedback_types);
- if (in_array($form_type, ['mail_type', 'sms_type', 'whatsapp_type'])) {
- $form['feedback_type'][$form_type] = ' selected="selected"';
- }
- $form['feedback_message'] = sanitize_textarea_field($_POST['feedback_message']);
- $saved = saveFeedback($form);
- $notify = '<div class="notify-feedback ' . $saved['status'] . '">' . $saved['message'] . '</div>';
- if ($saved['status'] == 'success') {
- // обнуление полей в форме
- $form = getFeedbackFormData();
- }
- }
- $form_html = $notify . '<form method="post" action="">
- <input type="text" name="feedback_name" placeholder="' . $fields['feedback_name'] . '" value="' . $form['feedback_name'] . '"/>
- <input type="email" name="feedback_mail" placeholder="' . $fields['feedback_mail'] . '" value="' . $form['feedback_mail'] . '" />
- <input type="tel" name="feedback_phone" placeholder="' . $fields['feedback_phone'] . '" value="' . $form['feedback_phone'] . '" />
- <input type="checkbox" name="feedback_type[mail_type]"' . ((!empty($_POST['feedback_type']['mail_type'])) ? ' checked="checked" ' : '') . 'value="1" id="feedback_mail_type"><label for="feedback_mail_type">Почта</label>
- <input type="checkbox" name="feedback_type[sms_type]"' . ((!empty($_POST['feedback_type']['sms_type'])) ? ' checked="checked" ' : '') . 'value="1" id="feedback_sms_type"><label for="feedback_sms_type">SMS</label>
- <input type="checkbox" name="feedback_type[whatsapp_type]"' . ((!empty($_POST['feedback_type']['whatsapp_type'])) ? ' checked="checked" ' : '') . 'value="1" id="feedback_whatsapp_type"><label for="feedback_whatsapp_type">WhatsApp</label>
- <textarea name="feedback_message" placeholder="' . $fields['feedback_message'] . '">' . $form['feedback_message'] . '</textarea>
- <input type="submit" value="Отправить" />
- </form>';
- return $form_html;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement