Для того чтобы добавить на страницу сайта форму для создания собственного типа записи (в WordPress, предполагаю), и сделать это с использованием AJAX, вам потребуется выполнить несколько шагов. Вот общий план действий:
1. **Создание HTML-формы**: форма должна содержать все необходимые поля для вашего кастомного типа записи и поля ACF.
2. **Подключение скриптов AJAX**: вам нужно будет подготовить и подключить JavaScript, который будет отвечать за отправку данных из формы на сервер без перезагрузки страницы.
3. **Обработка формы на сервере**: на стороне сервера вам нужно будет создать обработчик для приема данных из AJAX-запроса и создания записей в базе данных WordPress.
4. **Возвращение результатов на клиент**: после обработки данных на сервере, нужно передать ответ обратно в JavaScript для отображения сообщения пользователю о результате.
5. **Обработка безопасности**: важно проверять разрешения пользователя на создание записей и использовать nonce для защиты от CSRF атак.
Ниже приведены примеры для каждого из этих шагов:
### 1. Создание формы HTML:
Создайте файл `form.php` (или любое другое название по вашему выбору) и добавьте форму, например:
```html
<form id="custom-post-form" method="POST">
<input type="text" name="title" placeholder="Заголовок записи"/>
<textarea name="content" placeholder="Содержание записи"></textarea>
<!-- Здесь добавьте другие поля ACF -->
<input type="submit" value="Создать запись"/>
<!-- Nonce для защиты -->
<?php wp_nonce_field('custom_post_nonce_action', 'custom_post_nonce_field'); ?>
</form>
```
### 2. Подключение AJAX:
Вставьте JavaScript код. Вам нужно будет добавить его в файл темы или плагина и подключить используя `wp_enqueue_script()`:
```javascript
jQuery(document).ready(function($) {
$('#custom-post-form').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: ajaxurl, // Эта переменная должна быть определена в WordPress, если используется в админке
type: 'POST',
data: {
action: 'custom_post_creation', // Действие, которое вы будете обрабатывать в functions.php
title: $('input[name="title"]').val(),
content: $('textarea[name="content"]').val(),
nonce: $('input[name="custom_post_nonce_field"]').val()
// Добавьте остальные поля ACF здесь
},
success: function(response) {
// Обработайте успешный ответ
console.log(response);
},
error: function(error) {
// Обработайте ошибку
console.error(error);
}
});
});
});
```
Не забудьте определить глобальную переменную `ajaxurl` для front-end части, если вы используете это не в админке WordPress.
### 3. Обработка формы на сервере:
В файле `functions.php` темы (или основного файла вашего плагина), добавьте PHP код, который будет обрабатывать AJAX:
```php
add_action('wp_ajax_custom_post_creation', 'custom_post_creation_handler');
add_action('wp_ajax_nopriv_custom_post_creation', 'custom_post_creation_handler'); // Если необходимо, чтобы неавторизованные пользователи могли отправлять форму
function custom_post_creation_handler() {
// Проверяем nonce
if (!check_ajax_referer('custom_post_nonce_action', 'nonce', false)) {
wp_send_json_error('Неверный nonce', 403);
}
// Создание нового кастомного типа записи
$new_post_id = wp_insert_post(array(
'post_title' => sanitize_text_field($_POST['title']),
'post_content