Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Wordpress API для плагина

#json #wordpress #api #link


Нужно как-то сделать в плагине, чтобы при переходе по ссылке определенного типа отдавался JSON
где token - это код сгенерированный за алгоритмом текущего дня (этот код знает сервер
и отправитель)

method - это указатель метода для плагина   

Ссылка должна получится вида

http://domain.ru/wp-api/token/method?postdata=data


Я нашел частичный ответ 
тут

Но как читается эта штука, что это такое, и как ее доработать под меня. 

 add_rewrite_rule('^wp-api/pugs/?([0-9]+)?/?','index.php?__wp-api=1&pugs=$matches[1]','top');


Готов все попробовать сделать сам, но просто объясните как сделать точку входа и
чтоб она работала.
    


Ответы

Ответ 1



Если я верно угадал в комментарии к вашему ответу, что вы на самом деле хотите сделать, то есть два варианта решения данной задачи. Первый - разрабатывать действительно свой API, как советуют по вашей ссылке, то есть точку входа для внешних источников запроса. Но это довольно громоздкий вариант, который вряд ли вам нужен. Второй - просто принимать некоторые запросы и в ответ на них слать некий ответ. В предыдущем ответе другим пользователем вам был дан в целом рабочий для такого решения совет, но, как по мне, более правильно будет поступить описанным ниже образом. Главным образом потому, что конкретно для асинхронных запросов именно от плагинов, а у вас наверняка такая задача и стоит, именно описанный ниже функционал и подходит (он находится в разделе Plugin API), в то время как предложенный другим пользователем вариант - это использование функционала редиректов, что совершенно неверно методологически. Функционал этот завязан на такой хук: wp_ajax_(action) / wp_ajax_nopriv_(action). Если коротко, то он работает "из коробки" для запросов, сформированных из админки, и с небольшим применением магии работает и для фронта сайта. Подробное описание, как это сделать, есть тут. Ключевых моментов тут три: Написать функцию, которая будет делать POST-запрос на адрес admin-ajax.php (адрес будет использоваться в т.ч. и для фронта). Написать колбек, который будет использоваться для ловли вашего запроса и ответа на него, который, в свою очередь, повесить на этот запрос с помощью упомянутого хука wp_ajax_(my_action) (часть в скобках меняется на ваше название). Если запрос нужно делать не только из админки, то повесить тот же колбек с помощью хука wp_ajax_nopriv_(action). Добавить на фронт js-объект myajax (название произвольно), в котором будете хранить адрес вашего эндпоинта, название запроса, ключ для проверки запроса на принадлежность к вашему сайту (wp_nonce, токен, но это не про ваш токен, а про токен конкретно для этого функционала) и другие нужные вам на фронте переменные.

Ответ 2



Посмотрите в сторону endpoint'ов в WordPress. Добавьте свой endpoint, например json. И через хук add_action( 'template_redirect', 'function' ); разбирайте полученный результат. get( 'json' ); if ( ! $json ) { return; } // Код для получения JSON // ..................... wp_send_json( $json ); } add_action( 'template_redirect', 'mihdan_template_redirect' ); ?>

Комментариев нет:

Отправить комментарий