#php #wordpress #runtime-error #call
#php #wordpress #ошибка во время выполнения #вызов
Вопрос:
У меня есть несколько обращений к данным на сайте WordPress с использованием нескольких пользовательских полей. Поля не обязательно заполнять на серверной части. Итак, в моих шаблонах у меня есть вызовы, подобные этому:
<?php if( $additional_fields[ 'Time' ] ) { echo 'Duration: ' . $additional_fields[ 'Time' ] . '<br>'; } ?>
Теперь это действительно работает. И это здорово. Но если я включу WP Debug, а данных для этого поля нет, меня приветствует следующее:
Обратите внимание: неопределенный индекс: Время в /home/hellod8/public_html/wp-content/themes/my-theme/page-data.php в строке 63
Теперь опять же, не критически важно. Если я отключу отладку, проблема исчезнет. Тем не менее, я все еще хотел бы решить эту проблему.
Я думал, что смогу сделать это выше вызова функции:
<?php $additional_fields[ 'Time' ] = ''; ?>
Но все, что это делает, это вообще ничего не отображает для этого поля.
Итак, что бы сработало для устранения ошибки?
Комментарии:
1. Проверьте с помощью функции php,
isset
присутствует ли «time» в вашем массиве.2.
if( isset($additional_fields['Time'])) {..
илиif(!empty($additional_fields['Time'])) {..
— Первый проверяет, есть ли поле с именем ‘Time’, второй дополнительно проверяет, есть ли внутри значение (отличное от «).
Ответ №1:
Вы используете isset()
, чтобы определить, установлена ли переменная. Пример:
if( isset($additional_fields['Time']) ){
echo $additional_fields['Time'];
}
Если вы хотите проверить, установлена ли переменная, а не пуста, вы можете использовать empty()
. Пример:
if( !empty($additional_fields['Time']) ){
echo $additional_fields['Time'];
}
empty()
проверит множество вещей, таких как, является ли переменная isset
или значение blank
, zero
false
или null
. empty()
работает немного медленнее, чем isset()
(в основном из-за этих дополнительных проверок).
Пустой — это то же самое, что сказать:
if( isset($additional_fields['Time']) amp;amp; $additional_fields['Time'] ){
echo $additional_fields['Time'];
}