Задать вопрос
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

Запрос JavaScript => Wordpress, какой алгоритм?

Приветствую!

Необходимо составить JS запрос к WP. Для примера, попробуем отправить и вернуть простые данные.
После некоторого гугления, написал примитивный вариант реализации этой задачи.

В WP создаем тестовую функцию, которая будет принимать запрос от JS и отправлять json в ответ:
// временно, разместил в function.php
function fn_test() {
    wp_send_json([$_POST["prop1"], $_POST["prop2"]]);
}

add_action("wp_ajax_fn_test", "fn_test"); // только авторизованные
add_action("wp_ajax_nopriv_fn_test", "fn_test"); // только НЕ авторизованные

1. wp_ajax_fn_ - если обратиться к функции могут только авторизованные пользователи. wp_ajax_nopriv_ - для НЕ авторизованных пользователей. На настоящий момент это актуальная практика?

JavaScript-ом шлем запрос к WP:
fetch("/wp-admin/admin-ajax.php", {
    method: "POST",
    headers: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" },
    // body: { action: "fn_test", prop1: "a", prop2: "b" }, // не работает...
    body: "action=fn_test&prop1=a&prop2=b",
})
    .then(res => res.json())
    .then(json => console.log(json));

2. В body необходимо передавать строку action=fn_test, где fn_test - это часть названия функции в WP, к которой шлем запрос?

3. Если в body необходимо передавать объект, а не строку, то как ее передать? Ибо пример (выше) с закомментированым объектом в body не сработал.

Для усложнения задачи, используем функции плагина WooCommerce. Например, добавим товар в корзину:

function fn_test() {
    global $woocommerce;
    $woocommerce->cart->add_to_cart($product_id = 565, $quantity = 1, $variation_id = 0, $variation = [], $cart_item_data = []);
    // $product_id = 565 // единственный товар созданный в админке, для тестов прямо указал его id

    wp_send_json("товар добавлен в корзину");
}

add_action("wp_ajax_fn_test", "fn_test");
add_action("wp_ajax_nopriv_fn_test", "fn_test");

4. Нормально ли так взаимодействовать с API, например того же самого WooCommerce?

Хотелось бы услышать разные мысли, как и почему правильно использовать "то", а не "это". Любым замечаниям буду рад!
  • Вопрос задан
  • 420 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Есть REST API - это более современная и более удобная практика, чем wp_ajax. Но и этот метод все еще активно используется и в целом вполне ок. Но, имхо, работать с wp_ajax привычнее и удобнее бекендерам. Фронтендерам будет значительно удобнее через REST API:

https://woocommerce.github.io/woocommerce-rest-api...
https://github.com/woocommerce/woocommerce-rest-ap...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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