Zakonoposlushniy
@Zakonoposlushniy

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

Всем привет!

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

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

Благодарю за ответы.
  • Вопрос задан
  • 326 просмотров
Решения вопроса 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
Ну или просто используйте комментрарии как отзывы
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
27 нояб. 2024, в 19:08
1500 руб./в час
27 нояб. 2024, в 18:19
2000 руб./за проект
27 нояб. 2024, в 17:41
2000 руб./за проект