Как правильно делается форма добавления записи Вордпрес через фронтенд?

Я понимаю что нужно создать html форму и ajax-ом передавать данные(Заголовок записи и текст) на бэк. Но что дальше?Может есть хорошие практики реализации такого функционала?


Ответы (1 шт):

Автор решения: WP Punk

Подключаем скрипты:

add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );
function my_enqueue_scripts() {
    wp_enqueue_script( 'my-script', plugin_dir_url( __FILE__ ) . 'assets/js/main.js', [ 'jquery' ], '1.0.0', true );
    wp_localize_script(
        'my-script',
        'my_ajax',
           [
            'url'   => admin_url( 'admin-ajax.php' ),
            'nonce' => wp_create_nonce( 'my-nonce' ),
        ]
    );
}

js-файл для отправки AJAX:

jQuery(document).ready(function ($) {
     $.ajax({
         url: my_ajax.url,
         type: 'POST',
         data: {
             'nonce': my_ajax.nonce,
             'action': 'my_ajax_action',
         },
         success: function (data) {
             alert(data); // 'some-data'
         }
    });
});

Подключаем колбек для нашего пхп-файла:

add_action( 'wp_ajax_my_ajax_action', 'my_ajax_callback' );
add_action( 'wp_ajax_nopriv_my_ajax_action', 'my_ajax_callback' );
public function my_ajax_callback() {
    check_ajax_referer( 'my-nonce', 'nonce' );
    ...
    $request = 'some-data';
    wp_send_json( $request );
}

Отсюда хорошие практики:

  1. Добавить wp_localize_script с нужными данными. Обязательно ссылку к admin-ajax.php и nonce;
  2. В $.ajax используем наши данные из wp_localize_script (my_ajax.url, my_ajax.nonce, ...);
  3. Обязательно проверяем nonce. Для ajax есть для этого своя ф-ция check_ajax_referer;
  4. Если нужно отправить ответ используем wp_send_json

Подробнее в документации: https://wp-kama.ru/id_2018/ajax-v-wordpress.html

→ Ссылка