Как использовать AJAX для обновления поля ACF в цикле

#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 для объекта