Всем привет!
Как лучше сделать публикацию постов из формы 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' );