Дополнительные пользовательские поля – проверка нескольких пустых полей

Я создаю каталог в WordPress и используя дополнительные пользовательские поля, чтобы клиент мог заполнить записи в каталоге. Один из разделов предназначен для значков социальных сетей.

Используя следующий код, я могу проверить, не пусто ли какое-либо из трех полей (твиттер / facebook / linked-in), и если пустым, чтобы не показывать значок:

<li><?php if(get_field('twitter') != ""): ?><a href="<?php the_field('twitter'); ?>" class="twitter">Twitter<span></span></a></li> <?php else: ?><?php endif; ?> <li><?php if(get_field('facebook') != ""): ?><a href="<?php the_field('facebook'); ?>" class="facebook">Facebook<span></span></a></li> <?php else: ?><?php endif; ?> <li><?php if(get_field('linked_in') != ""): ?><a href="<?php the_field('linked_in'); ?>" class="linked">Linked In<span></span></a></li> <?php else: ?><?php endif; ?> 

Мне нужна помощь в работе, чтобы проверить, все ли 3 поля пусты, чтобы показать дополнительный текст. (Например, нет социальных значков для отображения).

В настоящее время у меня есть:

 <?php if(get_field('linked_in') && get_field('twitter') && get_field('facebook') != ""): ?> <span class="small">There are no Social Media links to display</span><?php endif; ?> 

Однако использование этого кода ничего не показывает, когда все 3 поля пустые, но показывает текст «Нет социальных …», когда все 3 поля имеют значения!

Я был бы очень благодарен, если кто-нибудь сможет отправить меня в правильном направлении на этом. Я все еще новичок, но стараюсь учиться, поэтому будьте нежны!

Solutions Collecting From Web of "Дополнительные пользовательские поля – проверка нескольких пустых полей"

Обратите внимание, что get_field возвращает false а не пустую строку, когда значение не найдено. Это не написано в документах, но вы можете попробовать var_dump на пустой элемент get_field для подтверждения.

Поэтому вы должны проверить их на false . Я просто разбил каждое условие на своей линии для простоты:

 <?php if( ( false === get_field('linked_in') ) && #no linked_in value ( false === get_field('twitter') ) && #no twitter value ( false === get_field('facebook') ) #no facebook value ): ?> <span class="small">There are no Social Media links to display</span> <?php endif; ?> 

Тест для возвращаемого значения get_field для элемента, который не существует:

 var_dump( get_field('dummy_string',232) ); // results: bool(false) 

Ваш if-statement не работает так, как вы этого хотите.

Измените эту часть кода

 if(get_field('linked_in') && get_field('twitter') && get_field('facebook') != "") 

В

 if(empty(get_field('linked_in')) && empty(get_field('twitter')) && empty(get_field('facebook'))) 

Таким образом, все три поля будут проверяться, являются ли они пустыми или нет.

Поскольку в результатах Google все еще очень много, я подумал, что добавлю альтернативный ответ, который помог мне. Не уверен, что ACF обновили свое кодирование, поскольку на это был дан ответ, но для меня работали только следующие:

 <?php if( ( !get_field('linked_in') ) && #no linked_in value ( !get_field('twitter') ) && #no twitter value ( !get_field('facebook') ) && #no facebook value ): ?> <p>There are no Social Media links to display </p> <?php endif; ?>