@hooli-gun

Как сделать страницу отзывов, с загрузкой файлов?

При отправке формы перекидывает на страницу 404, что не так делаю?
// Новый тип записи - «Отзывы»
add_action( 'init', 'register_post_type_reviews' );
function register_post_type_reviews(){
    register_post_type('reviews', array(
        'label'  => null,
        'labels' => [
            'name'               => 'Отзывы',
            'singular_name'      => 'Отзыв',
            'add_new'            => 'Добавить отзыв',
            'add_new_item'       => 'Добавление отзыва',
            'edit_item'          => 'Редактирование отзыва',
            'new_item'           => 'Новый отзыв',
            'view_item'          => 'Смотреть отзыв',
            'search_items'       => 'Искать отзывы',
            'not_found'          => 'Не найдено',
            'not_found_in_trash' => 'Не найдено в корзине',
            'menu_name'          => 'Отзывы',
        ],
        'description'            => 'Отзывы',
        'exclude_from_search'    => false,
        'public'                 => true,
        'capability_type'        => 'page',
        'hierarchical'           => false,
        'show_in_menu'           => null,
        'show_in_rest'           => null,
        'rest_base'              => null,
        'menu_position'          => null,
        'menu_icon'              => 'dashicons-format-status',
        'supports'               => [
            'title',
            'editor',
            // 'excerpt', 
            // 'trackbacks', 
            // 'custom-fields', 
            // 'comments', 
            // 'revisions', 
            // 'thumbnail', 
            // 'author', 
            // 'page-attributes', 
        ],
        'has_archive'         => false,
        'rewrite'             => true,
        'query_var'           => true,
    ) );
}
// Уведомления о новых неопубликованных отзывах
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;
            }
        }
    }
}

<?php
	// page-reviews.php
	$mypost_Query = new WP_Query( array(
		'post_type'      => 'reviews', # тип записи 
		'post_status'    => 'publish', # статус записи 
		'posts_per_page' => -1,        # количество (-1 - все) 
	) );

	if ( $mypost_Query->have_posts() ) {
		while ( $mypost_Query->have_posts() ) { $mypost_Query->the_post();

			get_template_part('/wp-content/themes/mirrors/inc/loop-review'); // шаблон отзыва 

		} wp_reset_postdata(); // "сброс" 

	} else { echo '<p>Извините, пока нет отзывов...</p>'; } ?>

	<form id="add_review">
		<h3>Добавление отзыва</h3>
		<input type="text" name="name" placeholder="Ваше Имя" required>
		<textarea name="message" placeholder="Ваше сообщение" required></textarea>
		<input type="file" name="file" multiple>
		<button type="submit" class="btn">Отправить</button>
	</form>

<?php
// add_review.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_message = trim($_POST['message']);
$user_file  = trim($_POST['file']);

$post_data = array(
    'post_author'   => 1,
    'post_status'   => 'pending',               # статус - «На утверждении» 
    'post_type'     => 'reviews',               # тип записи - «Отзывы» 
    'post_title'    => 'Отзыв - ' . $user_name, # заголовок отзыва 
	'post_file'    => $user_file,               # файл
    'post_content'  => $user_message,           # текст отзыва 
);

// Вставляем запись в базу данных 
$post_id = wp_insert_post( $post_data );

// Добавляем остальные поля 
update_field( 'name', $user_name, $post_id ); # имя 
update_field( 'file', $user_file, $post_id ); # файл

// loop-review.php
<div class="review-item">
    <div class="review-item__name"><?php the_field('name'); ?></div>
    <div class="review-item__file"><?php the_field('file'); ?></div>
    <time class="review-item__date"><?php the_date('j.n.Y'); ?></time>
    <div class="review-item__text"><?php the_content(); ?></div>
</div>

// Добавление отзыва
$('#add_review').submit(function (e) {
    e.preventDefault();
    $.ajax({
        type: 'POST',
        url: '/wp-content/themes/mirrors/inc/add_review.php',
        data: $(this).serialize(),
        success: () => {
            console.log('Спасибо. Ваш отзыв отправлен.');
            $(this).trigger('reset'); // очищаем поля формы 
        },
        error: () => console.log('Ошибка отправки.')
    });
});
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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