mk3mk
@mk3mk
занимаюсь вёрсткой (иногда)

Как публиковать посты из Ajax формы на сайте WordPress?

Всем привет!
Как лучше сделать публикацию постов из формы Ajax на странице сайта?
Публиковать могут любые пользователи. Авторизованные и нет.
Они забивают все данные в форму (название, цена, этаж и т.д.) нажимают кнопку отправить и всё это появляется на сайте, на этой же странице в виде поста. Без модерации админом. Это такое тестовое задание.
Посты может также добавлять админ из админки.
Посты эти зарегистрированы как отдельный Post type "Недвижимость" (realty).
К ним прикручены Кастомные поля - плагином ACF.
Поля такие: Фото, Название, Стоимость, Площадь, Этаж, Адрес, Город.
На данный момент сделано следующее: Post type Недвижимость, Post type Города, кастомные поля для этих видов полей. Выведены эти посты на главную страницу. Сами посты сделаны через админку. Штук 12 готовых. И они выведены на главной. Выведены их Фотографии, Название и т.д. Так же выведены города. Еще сделана Ajax форма, она выведена также на главную страницу. В ней есть все нужные поля. (кроме фото пока). После заполнения формы и нажатия на кнопку отправить все данные отображаются тут же на главной, просто в виде списка.
Теперь надо еще доделать следующее: (и я пока не знаю, как все это сделать)
чтобы из формы все данные формировали очередной пост типа Недвижимость и этот пост появлялся на этой странице. Последним. Ну и соответственно он должен сохраняться в базе. И в админке мы его тоже должны потом увидеть. В списке постов этого типа. Города мы трогать не будем, обойдёмся теми, которые уже сделаны в админке. Т.е. Пользователь должен будет вбить только данные Недвижимости.

Сам тестовый сайт вот тут
https://89036797842.ru/test05/

Вот код формы для добавления объекта недвижимости, и скрипт отправки формы

<!-- Форма для добавления объекта -->

<div class="container">
    <div class="row">
        <div class="col-md-6 col-sm-12 offset-md-3">
            <form id="formAjaxAddPost">
              <div class="form-row">
                  <input type="text" id="realty_name" class="form-control" placeholder="Название">
                  <input type="text" id="realty_area" class="form-control" placeholder="Площадь, кв.м.">
                  <input type="text" id="realty_cost" class="form-control" placeholder="Стоимость, руб.">
                  <input type="text" id="realty_address" class="form-control" placeholder="Адрес">
                  <input type="text" id="realty_living_area" class="form-control" placeholder="Жилая площадь, кв.м.">
                  <input type="text" id="realty_floor" class="form-control" placeholder="Этаж">
                  <input type="text" id="realty_city" class="form-control" placeholder="Город">
                  <button type="submit" class="btn btn-primary">Отправить</button>
              </div>
            </form>
        </div>
    </div>
</div>


<!-- Скрипт для отправки формы -->

<script>
jQuery(function($){
	$('#formAjaxAddPost').submit(function(event){
	    event.preventDefault();
      let realty_name = $("#realty_name").val();
      let realty_area = $("#realty_area").val();
      let realty_cost = $("#realty_cost").val();
      let realty_address = $("#realty_address").val();
      let realty_living_area = $("#realty_living_area").val();
      let realty_floor = $("#realty_floor").val();
      let realty_city = $("#realty_city").val();
		$.ajax({
          type: "POST",
          // url: "https://89036797842.ru/test05/wp-content/themes/understrap-child/page-templates/ajax.php",
          // url: "/test05/wp-admin/admin-ajax.php",
          url: "https://89036797842.ru/test05/wp-admin/admin-ajax.php",
          data: {
                action: 'ajax_realty_add',
                realty_name: realty_name,
                realty_area: realty_area,
                realty_cost: realty_cost,
                realty_address: realty_address,
                realty_living_area: realty_living_area, 
                realty_floor: realty_floor, 
                realty_city: realty_city
            },
          success: function (response) {
             $('#ajax_div_response').html(response);
          }
        });
	});
});
</script>


А вот обработка формы в файле functions.php

function ajax_form(){
    // https://inprocess.by/blog/otpravka-formy-ajax-v-wordpress/   
    $realty_name = $_REQUEST['realty_name'];
    $realty_area = $_POST['realty_area'];
    $realty_cost = $_POST['realty_cost'];
    $realty_address = $_POST['realty_address'];
    $realty_living_area = $_POST['realty_living_area'];
    $realty_floor = $_POST['realty_floor'];
    $realty_city = $_POST['realty_city'];
    
    echo ('Имя: ' . $realty_name);
    echo ('Площадь: ' . $realty_area);
    echo ('Стоимость: ' . $realty_cost);
    echo ('Адрес: ' . $realty_address);
    echo ('Жилая площадь: ' . $realty_living_area);
    echo ('Этаж: ' . $realty_floor);
    echo ('Город: ' . $realty_city);
}

add_action('wp_ajax_nopriv_ajax_realty_add', 'ajax_form' );
add_action('wp_ajax_ajax_realty_add', 'ajax_form' );
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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