Почему неопределенное свойство stdClass Ошибка при последнем обновлении Wordpress? - PullRequest
0 голосов
/ 11 октября 2019

После обновления до последней версии Wordpress core 5.2.3 я получаю эти сообщения об ошибках в пользовательском файле плагина.

Notice: Undefined property: stdClass::$addressLocality in 
/var/www/html/www.clientsite.com/wp/wp-content/plugins/hove- 
widgets/widgets/careers.php on line 52
Notice: Undefined property: stdClass::$addressRegion in 
/var/www/html/www.clientsite.com/wp/wp-content/plugins/hove- 
widgets/widgets/careers.php on line 53
Notice: Undefined property: stdClass::$addressLocality in 
/var/www/html/www.clientsite.com/wp/wp-content/plugins/hove- 
widgets/widgets/careers.php on line 52
Notice: Undefined property: stdClass::$addressRegion in 
/var/www/html/www.clientsite.com/wp/wp-content/plugins/hove- 
widgets/widgets/careers.php on line 53

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

<?php

function hove_get_careers(){
    $output = '';
    $response = file_get_contents('https://hire.withgoogle.com/v2/api/t/hovecom/public/jobs');
    $response = json_decode($response);
    usort($response,function($a,$b) {return strnatcasecmp($a->hiringOrganization->department->name,$b->hiringOrganization->department->name);});
    // /var_dump($response);die;
    $department=null;
    $count=0;
    foreach($response as $r){
        $title = $r->title;
        $url = $r->url;
        $addressLocality = !empty($r->jobLocation->address->addressLocality) ? $r->jobLocation->address->addressLocality : '';
        $addressRegion = !empty($r->jobLocation->address->addressRegion) ? $r->jobLocation->address->addressRegion : '';
        $location = $addressLocality.','.$addressRegion;
        $actualdepartment = $r->hiringOrganization->department->name;
        if($actualdepartment!=$department){
            $count++;
            if($count!=1){
                $output .= '</ul>'; 
            }
            $department=$actualdepartment;
            $output .= '<h3>'.$actualdepartment.'</h3>';
            $output .= '<ul class="careers">';
        }
        $output .= '<li class="press-job"><span class="details"><span class="title">'.$title.'</span><span class="location">'.$location.'</span></span><span class="cta">Learn More</span><a href="'.$url.'" class="ab-link"></a></li>';
    }
    $output .= '</ul>'; 
    return $output; 
}

Поскольку я не создавал этот плагин, я не слишком знаком со всеми его целевыми функциями. Я предполагаю, что для этого может потребоваться какой-то обновленный код из hire.with.google.com или, возможно, свойство должно быть определено по-другому из-за устаревшего кода, который больше не совместим с каркасом Wordpress 5.2.3.

1 Ответ

0 голосов
/ 11 октября 2019

Проблема заключается в том, что код проверяет, являются ли addressLocality и addressRegion пустыми или нет. Он не проверяет, действительно ли они доступны или нет. Возможно, API, который использует плагин, изменился в какой-то момент, и указанные свойства теперь либо больше не доступны, либо предоставляются только при соблюдении определенных условий.

Чтобы исправить уведомление, мы могли бы просто проверить, являются ли эти два свойстваустановить или не использовать isset () , например, так:

$addressLocality = isset($r->jobLocation->address->addressLocality) && !empty($r->jobLocation->address->addressLocality) ? $r->jobLocation->address->addressLocality : '';
$addressRegion = isset($r->jobLocation->address->addressRegion) && !empty($r->jobLocation->address->addressRegion) ? $r->jobLocation->address->addressRegion : '';

Следующее выходит за рамки оригинальной области вашего вопроса, но я подумал, что укажу на это: если$addressLocality и $addressRegion пусты, тогда $location будет просто ,, что может быть нежелательным выводом. Я бы добавил эту дополнительную проверку, чтобы убедиться, что $location либо пусто, либо отображает фактический адрес:

$location = ($addressLocality && $addressRegion) ? $addressLocality.','.$addressRegion : '';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...