Вопрос или проблема
Я получаю следующую ошибку в приведенном ниже фрагменте кода, указывая на строку, где происходит присвоение $result[ 'body' ]
. Разве is_wp_error
не должен был поймать эту ошибку?
Фатальная ошибка: невозможно использовать объект типа WP_Error в качестве массива
$result = wp_remote_post( ..... ) );
if ( is_wp_error( $result ) ):
$display = 'Сообщение об ошибке';
else:
$display = $result[ 'body' ];
endif;
Как wp_remote_post
, так и wp_remote_get
возвращают объект WP_Error
, если произошла ошибка. Вы можете использовать функцию get_error_message
класса WP_Error
, чтобы получить ошибку и отобразить ее.
$request = wp_remote_post( $url );
if ( is_wp_error( $request ) ) {
// Если запрос не удался, отобразите сообщение об ошибке
echo $request->get_error_message();
} else {
$content = wp_remote_retrieve_body( $request );
// Выполните действия с $content
}
Для получения более подробной информации, перейдите сюда
Ответ или решение
Проблема, с которой вы столкнулись, вызвана тем, что в вашем коде вы пытаетесь использовать объект WP_Error
как массив. Давайте разберем ваш код и предложим корректное решение.
Ваша ошибка заключается в том, что вы вызываете функцию wp_remote_post
, которая может возвратить объект WP_Error
, если происходит ошибка, но в случае ошибки вы пытаетесь работать с $result
как с массивом:
$result = wp_remote_post( ... );
if ( is_wp_error( $result ) ):
$display = 'Error Message';
else:
$display = $result[ 'body' ];
endif;
Когда wp_remote_post
возвращает объект WP_Error
, ваш код попадает в блок else
, где вы пытаетесь получить доступ к $result['body']
, что и вызывает ошибку.
Вот рекомендованный способ обработки ответа от wp_remote_post
, который и проверяет наличие ошибки, и корректно обрабатывает ответ:
$request = wp_remote_post( $url );
if ( is_wp_error( $request ) ) {
// Если запрос завершился неудачно, выводим сообщение об ошибке
echo $request->get_error_message();
} else {
// Получаем тело ответа
$content = wp_remote_retrieve_body( $request );
// Здесь вы можете добавить ваш код для работы с $content
}
В этом примере используется функция wp_remote_retrieve_body
, которая извлекает тело ответа, если запрос выполнен успешно. Также используется метод get_error_message
для получения подробной информации о причине сбоя запроса.
Таким образом, данный подход гарантирует, что вы корректно обрабатываете как успешные, так и неуспешные ответы, избегая ошибок вроде Fatal error: Cannot use object of type WP_Error as array
. Если вам нужно более глубокое понимание, вы можете ознакомиться с дополнительными ресурсами, связанными с использованием HTTP API в WordPress.
Если вам нужна дополнительная помощь или пояснение, не стесняйтесь спрашивать!