Ошибка: Попытка получить свойство non-object в options.php

27 февр. 2013 г., 12:04:56
Просмотры: 22.9K
Голосов: 0

При тестировании моей темы в режиме wp_debug я получаю следующее уведомление в options.php.

Я вижу, где проблема, но не знаю, как её исправить.

Похоже, что non-object вызывается из массива таксономий в options.php, так как массив не может найти term_id, потому что пост и/или категория не были созданы в пользовательском типе записи. Когда я создаю пост и назначаю ему категорию, уведомление исчезает.

// Загрузить все пользовательские таксономии в массив
$options_password_taxonomies = array();
$taxonomies_password_terms_obj = get_terms('password_gallery_category');
foreach ( $taxonomies_password_terms_obj as $taxonomy) {
    $options_password_taxonomies[$taxonomy->term_id] = $taxonomy->name;
}

// Выбрать категорию для клиентской области
$options[] = array(
    'name' => __('Password Protected Galleries', 'shutter'),
    'desc' => __('Choose a category for password protected client galleries.', 'shutter'),
    'id' => 'client_area',
    'type' => 'select',
    'options' => $options_password_taxonomies);
0
Все ответы на вопрос 2
5

Вы можете использовать isset() или property_exists() для проверки существования свойства.

foreach ( $taxonomies_password_terms_obj as $taxonomy) {
    if( isset( $taxonomy->term_id ) ){
        $options_password_taxonomies[$taxonomy->term_id] = $taxonomy->name;
    }
}
27 февр. 2013 г. 12:26:41
Комментарии

Спасибо. Это исправляет проблему, но создает новое уведомление.

Стоит ли мне задать это как новый вопрос?

Notice: Undefined index: homepage_feature in /inc/options-framework.php on line 313

Dean McCann Dean McCann
27 февр. 2013 г. 12:38:22

Да, вам следует создать новый вопрос. Но сначала перейдите к этой строке и используйте еще одну проверку isset() перед использованием этой переменной массива. Это должно исправить проблему.

RRikesh RRikesh
27 февр. 2013 г. 12:40:44

Спасибо. Я вижу, что в options-framework.php уже есть isset() - но это не помогает.

if ( ! isset( $option['id'] ) ) {

continue; }

Dean McCann Dean McCann
27 февр. 2013 г. 12:47:48

ок, я добавил новую проверку isset() для term_id, и это, кажется, устранило ошибки. спасибо, что познакомили меня с магией isset() :)

Dean McCann Dean McCann
27 февр. 2013 г. 12:50:14

ок, на самом деле это не решило мою вторую проблему, поэтому создам новый вопрос.

Dean McCann Dean McCann
27 февр. 2013 г. 14:40:38
0

используйтеisset($variable_to_check) или is_array($variable_to_check) перед использованием foreach, так как foreach работает только с массивами данных, то есть ваша переменная должна содержать элементы

21 февр. 2020 г. 16:40:03