При отправке формы перекидывает на страницу 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('Ошибка отправки.')
});
});