#php #ajax #wordpress #advanced-custom-fields
Вопрос:
Я запускаю цикл, который отображает сообщения пользовательского типа. У каждого поста есть <button class=favorite-toggle>add to favorites</button>
свой . Когда пользователь нажимает на кнопку, я бы хотел, чтобы этот объект post добавлялся в поле ретранслятора, специфичное для этого пользователя.
Как я могу сделать это с помощью AJAX? Мое базовое понимание заключается в том, что мне нужно будет передать переменные post_ID и user_ID в JS, а затем с помощью функции AJAX передать переменные в новый файл PHP, который будет содержать мою функцию, но я не могу этого сделать. Любая помощь будет очень признательна!
Ответ №1:
Я не уверен, какие фреймворки JS/PHP у вас есть, но ванильное решение для HTML JS будет примерно таким:
var btnAddToFavorites = document.getElementById('js-add-to-favorites');
btnAddToFavorites.addEventListener('click', function(e) {
let _data = {
post_ID: "1234"
}
fetch("addToFavourite.php", {
method: "POST",
body: JSON.stringify(_data),
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(json => {
console.log("success")
console.log(json)
})
.catch(err => console.log(err));
});
<button class="favorite-toggle" id="js-add-to-favorites">Add to Favorites</button>
и PHP addToFavourite.php
<?php
$body = file_get_contents("php://input");
$object = json_decode($body, true);
print_r($object);
?>
Есть несколько способов ввести идентификатор записи в вашу функцию JS. Если у вас уже нет никаких данных/моделей просмотра в вашем JS, то, предполагая, что у вас есть PHP, генерирующий страницу, вы можете добавить ее в кнопку
<button class="favorite-toggle" id="js-add-to-favorites" data-postid="1234">Add to Favorites</button>
и загрузите его в JS с
e.getAttribute("data-postid")
Комментарии:
1. Большое спасибо за ответ! У меня все еще есть небольшие проблемы с тем, чтобы это работало, но я уверен, что это моя вина каким-то образом. Во-первых, я получаю ошибку в своей консоли: «Синтаксическая ошибка: Неожиданный токен A в JSON в позиции 0». Кроме того, в addToFavorite.php файл, как мне затем получить доступ к переданным данным и использовать их для выполнения функции update_field() для поля ACF?
2. @ArtVandelay001 вы хотите , чтобы json начинался с a
{
или a[
, попробуйте записать/распечатать значение непосредственно перед тем, как оно пройдет через функцию JSON, чтобы вы могли попытаться понять, как туда попасть. Для доступа к данным в PHP я считаю$object['post_ID']
, что это для массива и$object->post_ID
для объекта