Zakonoposlushniy
@Zakonoposlushniy

Плагин для добавления автоматических отзывов WordPress?

Всем привет!

Ищу плагин для добавления отзывов для WP ( желательно бесплатный )
Вроде задача простейшая - вбей в гугл и найди. Но, я уже всё обыскался и решил обратится сюда.
Все плагины которые я находил, они реализованы так, что администратор сам добавляет отзывы на сайт.

А мне нужно чтобы человек зашел, написал имя, свой отзыв ( при возможности загрузил аватар ) и отзыв сразу же отобразился на странице отзывов.
По похожему принципу, как работают комментарии на сайтах.

Благодарю за ответы.
  • Вопрос задан
  • 323 просмотра
Решения вопроса 1
Обычно свои наработки не выкладываю, но вот держите:

Сама html-форма:
html-код
<form class="form-wrapper reviews-form" id="reviews-form">
					<h3>Оставить отзыв</h3>
					<div class="reviews-form__row">
						<div class="form-wrapper__group">
							<input type="text" name="name" value="" placeholder="Ваше имя" required>
						</div>
						<div class="form-wrapper__group">
							<input type="text" name="email" value="" placeholder="Ваш e-mail" required>
						</div>
						<div class="reviews-form__mark-wrapper">
							<ul class="reviews-form__marks-list">
								<li><button class="green" data-review-mark="positive"><img src="<?php echo get_template_directory_uri(); ?>/images/svg/happy.svg" alt="Положительный" class="svg"></button></li>
								<li><button class="yellow" data-review-mark="medium"><img src="<?php echo get_template_directory_uri(); ?>/images/svg/surprised.svg" alt="Удовлетворительный" class="svg"></button></li>
								<li><button class="red" data-review-mark="negative"><img src="<?php echo get_template_directory_uri(); ?>/images/svg/sad.svg" alt="Отрицательный" class="svg"></button></li>
							</ul>
						</div>
					</div>
					<div class="reivews-form__message-wrapper">
						<textarea name="message" placeholder="Ваш отзыв" required></textarea>
						<input type="hidden" name="rating" value="" required>
					</div>
					<button type="submit" class="button button--green">Оставить отзыв</button>
				</form>

Обработчики форм:
/**
      * @module       Marks
      * @description  Выставление оценки в форме
      */
     $('button[data-review-mark]').on('click',function(e){
       e.preventDefault();
       $('button[data-review-mark]').removeClass('active');
       $(this).addClass('active');
       $('#reviews-form').find('[name="rating"]').val($(this).attr('data-review-mark'));
     });

/**
     * @module       Добавление отзыва
     * @description  Добавление отзыва
     */
    $('#reviews-form').submit(function(e) {
      e.preventDefault();
      $.ajax({
        type: "POST",
        url: "/api/newreview.php",
        data: $(this).serialize(),
        success: function(){
          $('#successreviewmodal').modal('show');
        },
        error: function() {
          $('#errormodal').modal('show');
        }
      });
    });



Так как запрос отсылается на /api/newreview.php, то по этому адресу у вас должен располагаться этот файл со следующим кодом:

Код newreview.php:
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);

// *
// Подключаем все файлы для работы
// *
require_once( $_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );


$user_name = trim($_POST['name']);
$user_mail = trim($_POST['email']);
$message = trim($_POST['message']);
$rating  = trim($_POST['rating']);

$post_data = array(
	'post_title'    => 'Отзыв #' . uniqid(),
	'post_content'  => $message,
	'post_status'   => 'pending',
	'post_author'   => 1,
  'post_type'     => 'reviews'
);

// Вставляем запись в базу данных
$post_id = wp_insert_post( $post_data );
// *
// Добавляем все дополнительные поля
// *
update_field( 'rating', $rating, $post_id );
update_field( 'author', $user_name, $post_id );
update_field( 'e-mail', $user_email, $post_id );



?>



Так как у нас пост добавляется в кастомный тип записей, нужно его сначала создать. Для этого в файл functions.php добавляем следующее:

Кастомный тип записей
/**
 * Кастомный тип записей:  Отзывы
 */
function create_posttype_reviews() {
  register_post_type( 'reviews',
    array(
      'labels' => array(
        'name' => __( 'Отзывы' ),
        'singular_name' => __( 'Отзывы' )
      ),
      'public' => true,
      'has_archive' => false,
      'rewrite' => array('slug' => 'reviews'),
    )
  );
}
add_action( 'init', 'create_posttype_reviews' );



На этом все. В админке wordpress у вас появится новый блок меню "Отзывы", куда и будут попадать все отзывы. В качестве бонуса, могу вам прикрепить код, который надо поместить в functions.php, благодаря которому, боявится балун с количеством неопубликованных отзывов (так проще их отслеживать):

php код
/**
 * Уведомления о новых неопубликованных постах
 */

add_action( 'admin_menu', 'add_user_menu_bubble' );
function add_user_menu_bubble(){
	global $menu;

	// Отзывы
	$count = wp_count_posts('reviews')->pending; // на подтверждении
	if( $count ){
		foreach( $menu as $key => $value ){
			if( $menu[$key][2] == 'edit.php?post_type=reviews' ){
				$menu[$key][0] .= ' <span class="awaiting-mod"><span class="pending-count">' . $count . '</span></span>';
				break;
			}
		}
	}
}



P.S не забудьте проверять всю информацию, поступающую от клиента.

UPD: забыл добавить, чтобы отзывы где-то выводились, вам нужно в каком-то месте шаблона их вывести:

WP Loop
<?php
							$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
							query_posts(array(
								'post_type' => 'reviews',
								'posts_per_page' => -1,
								'paged' => $paged,
							));
						?>
						<?php if ( have_posts() ) : ?>
							<?php $i = 1; ?>
							<?php while ( have_posts() ) : the_post(); ?>
								<div class="col-lg-6">
									<?php echo get_template_part('template-parts/content','review'); ?>
								</div>
								<?php $i++; ?>


							<?php endwhile; ?>
						<?php endif; ?>
						<?php wp_reset_postdata(); ?>



Так же прошу заметить, что при добавлении нового отзыва (файл newreview.php), в этом блоке кода:
$post_data = array(
	'post_title'    => 'Отзыв #' . uniqid(),
	'post_content'  => $message,
	'post_status'   => 'pending',
	'post_author'   => 1,
  'post_type'     => 'reviews'
);

указано: 'post_status' => 'pending',, что означает добавление всех новых отзывов со статусом На модерации, если нужно отключить эту настройку, то поставьте 'post_status' => 'publish',
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack Куратор тега WordPress
Thinking about a11y
Ну или просто используйте комментрарии как отзывы
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы