JSON-запросы на сайт на wordpress

296
04 апреля 2017, 13:04

Не буду вдаваться в подробности, с остальными мелочами разберусь сам, но на данный момент волнует меня следующий вопрос:
Могу ли я каким-либо образом с помощью wordpress загрузить свой php-файл, либо поступить еще как-то, чтобы потом на этот файл можно было дать ссылку, и на любой json-запрос легко был бы дан ответ? Ниже конкретика.

Например, мне нужно создать следующий php-файл:

<?php 
if (!isset($_REQUEST)) { 
  return; 
} 
$myanswer = 'answerText';

$data = json_decode(file_get_contents('php://input')); 

switch ($data->type) { 
  case 'smthing': 
    echo $myanswer; 
    break; 
    echo('ok'); 
break; 
} 
?> 

То есть, при отправке запроса с полем data=smthing, сервер, пославший запрос, должен получить ответ answerText.
Возможно ли такое? И если возможно, на какую нагрузку по количеству запросов в минуту/секунду возможна поддержка? Спасибо заранее.

Answer 1

На WordPress сервере надо вставить такой обработчик в function.php:

function reply() {
    if ( isset($_POST['smthing']) ) {  // проверяем, задан ли параметр POST smthing
        $smthing = $_POST['smthing'];  // берем его значение
        $smthing = json_decode($smthing);  // декодируем json
        if ($smthing->type == 'good') {  // если тип в json = 'good' (ну, типа, хороший запрос)
            wp_send_json_success('Answer to good request');  // посылаем назад json с правильным сообщением 
        }
        else {
            wp_send_json_error();  // иначе - просто посылаем ))
        }
    }
}
add_action( 'init', 'reply' );  // так в WP добавляется хук на этапе инициализации

Поскольку срабатывать он будет на довольно раннем этапе, а wp_send_json... завершает выполнение (как и die() ), то работать код будет достаточно эффективно.

Насчет быстродействия. Вот тут пишут, что добились на WordPress 1700 просмотров страниц в секунду. Код в примере выше (при равном железе) будет работать существенно быстрее, потому что нет даже вызова плагина для отдачи кешированной страницы.

Общие рекомендации по разработке высоконагруженных систем на WordPress можно найти тут.

Answer 2

Вы можете сделать, как вы написали. Я точно так же пишу все обработчики почты, так ими легко управлять (как файлом обычным на серваке). Обычно я кладу обработчики в корень темы.

    jQuery.ajax({
    type: 'POST',
    url: '/wp-content/themes/theme/mailer.php',
    data: msg,
    success: function(){
        console.log("thx");
        jQuery('#form-result').modal('show');
    },
    error: function(xhr, str){
        alert('Возникла ошибка: ' + xhr.responseCode);
    }}
);
READ ALSO
Ругается на конструкцию if

Ругается на конструкцию if

Почему выдаёт ошибку Parse error: syntax error, unexpected 'if' (T_IF)?

256
Сократить код C++

Сократить код C++

Добрый вечер! Есть такой код

204
Как проверить инициализирован ли opengl?

Как проверить инициализирован ли opengl?

Как проверить инициализирован ли OpenGL, функцией glutInit(&argc, argv)?

310