Как добавить на страницу сайта форму для создания собственного типа записи?

Привет! Как я могу добавить форму добавления кастомного типа записи на страницу сайта? Я уже создал кастомную запись, зарегистрировал таксономии и создал поля с помощью ACF. Как мне начать и что делать? Кроме того, это должно быть реализовано с помощью AJAX.
  • 28 января 2024 г. 8:38
Ответы на вопрос 2
Для того чтобы добавить на страницу сайта форму для создания собственного типа записи (в 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
Помогите с направлением, не знаю как начать и что делать....

Есть масса плагинов для постинга с фронта.
Искать так , так и тп.

Но работа с кастомными сущностями как правило в платных версиях.
Похожие вопросы