Использование wp_remote_get вместо file_get_contents
При проверке моей темы через плагин Theme checker он выдает предупреждение о использовании file_get_contents
для получения JSON URL. Я нашел посты, где рекомендуют использовать wp_remote_get
. Сейчас я декодирую URL следующим образом:
$url = 'url' . $var;
$json = file_get_contents($url,0,null,null);
$output = json_decode($json,true);
Сообщение, которое я получаю от Theme Checker:
WARNING: file_get_contents was found in the file.php possible file operations.
Выдается ли это предупреждение только потому, что есть функция WordPress, которую я мог бы использовать, или есть другие причины? Также, как правильно использовать wp_remote_get
? Я пробовал несколько вариантов, в основном просто заменяя file_get_contents на wp_remote_get
, но безуспешно. URL вообще не декодируется.

Если вам нужно отправить JSON-ответ, для этого есть набор функций. В случае, если это необходимо для AJAX-обратного вызова:
wp_remote_retrieve_response_message()
wp_remote_retrieve_response_code()
wp_send_json_success()
wp_send_json_error()
wp_send_json()
В итоге это будет выглядеть примерно так:
$request = wp_remote_get( 'http://example.com' );
$response = wp_remote_retrieve_body( $request );
if (
'OK' !== wp_remote_retrieve_response_message( $response )
OR 200 !== wp_remote_retrieve_response_code( $response )
)
wp_send_json_error( $response );
wp_send_json_success( $response );
Обе функции wp_send_json_success/_error()
являются обёртками для wp_send_json()
, которая включает wp_die()
в конце. Так что больше ничего делать не нужно.
Имейте в виду, что 99% удалённых API отправляют 200/OK
даже в случае ошибок. Вам всё равно придётся вручную проверять результат и искать ошибки.

Используйте wp_remote_get() в сочетании с wp_remote_retrieve_body()
Пример
<?php
$request = wp_remote_get('http://example.com');
$response = wp_remote_retrieve_body( $request );
echo $response;
?>
Проверьте документацию для возможных аргументов

Привет, спасибо, похоже, я могу вывести весь JSON, но когда я пытаюсь получить только определенные значения из файла, например $response['companyname'], я получаю просто '{'

Если тело документа тоже является JSON-файлом, то используй json_encode()

Вы можете использовать wp_remote_get()
следующим образом:
$url = 'url' . $var;
$request = wp_remote_get($url);
// Получаем тело ответа
$response = wp_remote_retrieve_body( $request );
// Декодируем json
$output = json_decode( $response );
$output
теперь содержит то, что вам нужно, и вы можете продолжать работу.
Также существует серия обучающих материалов по wp_remote_get()
. Ознакомьтесь с ними — это определенно поможет.
Ссылка -- Обучающее руководство
Надеюсь, это поможет.
