Intereting Posts
WordPress -> If Is Role Subscriber Показать изображение? Безопасно ли зарегистрировать таксономию без использования каких-либо крючков? Загрузка нескольких изображений не работает Страница пользовательской главной страницы с использованием WP_Query Показывать категории с дочерней категорией, разделенные буквой Добавить текст ссылки Вернуться к разделу Вставка / редактирование ссылки Страница категории при использовании статической передней страницы добавить идентификатор CSS в тело страницы в wordpress Как включить сообщение в тему? Добавление данных в массив в usermeta и отображение его в цикле Как добавить атрибут onclick в список флажков? Как перечислить все сетевые сайты на одной странице Добавить размер изображения для избранного изображения с адаптивным дизайном Заменить поле таксономического описания с помощью редактора Visual / WYSIWYG Пользовательская Галерея HTML работает только при прикреплении изображений к сообщению / странице

Как скрыть div на основе содержимого настраиваемого поля

Я нашел несколько других тем, задающих этот же вопрос, но по какой-то причине я не могу заставить работать решение для меня. Для пояснения я хочу иметь настраиваемое поле, которое применяется к сообщению, но не содержит значения, чтобы я мог настроить пост шаблона (в этом случае элемент портфеля) и просто дублировать его, но не учитывать значения, в которых поле не применяется. , и, конечно, если нет значения, я не хочу, чтобы связанный html показывал. Итак, вот что я имею:

<?php $fbb_CurrentMetaSet = get_post_meta($post->ID, 'fbb_ProjectData_Process', false); if (!empty($fbb_CurrentMetaSet)){?> <div id="fbb_ProjectData_Process" class="fbb_ProjectDataSetSection"> <div class="fbb_Title"><h5>Process:</h5></div> <div> <?php foreach($fbb_CurrentMetaSet as $fbb_MetaDataSingle){ echo '<div>'.$fbb_MetaDataSingle.'</div>'; }?> </div> </div> <?php } ?> 

Этот код работает, если я просто проверю, существует ли настраиваемое поле (if ($ fbb_CurrentMetaSet)), но по какой-либо причине метод! () Не работает. Может ли кто-нибудь объяснить, почему? FYI Я использую последний wordpress и x-тему.

Возможно, что в более широком контексте дается объяснение, поэтому ниже я вставил весь набор связанного кода. Мой тестовый код можно найти в последнем разделе. Как только у меня это получится, я намереваюсь дублировать его на аналогичные разделы над ним:

 <div id="fbb_ProjectDataWrap"> <div id="fbb_ProjectData_Client" class="fbb_ProjectDataSetSection"> <div class="fbb_Title"><h5>Client:</h5></div> <ul> <?php $fbb_CurrentMetaSet = get_post_meta($post->ID, 'fbb_ProjectData_Client', false);?> <?phpforeach($fbb_CurrentMetaSet as $fbb_MetaDataSingle){ echo '<li>'.$fbb_MetaDataSingle.'</li>'; } }?> </ul> </div> <div id="fbb_ProjectData_Tools" class="fbb_ProjectDataSetSection"> <div class="fbb_Title"><h5>Tools:</h5></div> <ul> <?php $fbb_CurrentMetaSet = get_post_meta($post->ID, 'fbb_ProjectData_Tools', false); ?> <?php foreach($fbb_CurrentMetaSet as $fbb_MetaDataSingle){ echo '<li>'.$fbb_MetaDataSingle.'</li>'; } ?> </ul> </div> <div id="fbb_ProjectData_About" class="fbb_ProjectDataSetSection"> <div class="fbb_Title"><h5>About:</h5></div> <div> <?php $fbb_CurrentMetaSet = get_post_meta($post->ID, 'fbb_ProjectData_AboutTheProject', false); ?> <?php foreach($fbb_CurrentMetaSet as $fbb_MetaDataSingle){ echo '<div>'.$fbb_MetaDataSingle.'</div>'; } ?> </div> </div> <?php $fbb_CurrentMetaSet = get_post_meta($post->ID, 'fbb_ProjectData_Process', false); if (!empty($fbb_CurrentMetaSet)){?> <div id="fbb_ProjectData_Process" class="fbb_ProjectDataSetSection"> <div class="fbb_Title"><h5>Process:</h5></div> <div> <?php foreach($fbb_CurrentMetaSet as $fbb_MetaDataSingle){ echo '<div>'.$fbb_MetaDataSingle.'</div>'; }?> </div> </div> <?php } ?> </div> 

Solutions Collecting From Web of "Как скрыть div на основе содержимого настраиваемого поля"

Ваш третий параметр get_post_meta() установлен в значение false . Это означает, что он вернет массив. Даже если вы не установили значение для этого настраиваемого поля, оно все равно будет записывать элемент массива в БД – поэтому empty() вернет false.

Попробуйте переключиться на true для вашего третьего параметра. Это должно возвращать пустую строку.

Я думаю, что мы можем сделать это немного лучше и безопаснее. Мы можем получить всю мета-почту за один раз ( это немного сократит ваш код, см. Это сообщение о пользовательской производительности поля ).

Мы можем попробовать следующее: ( Код прокомментирован, когда мы идем, и обратите внимание, что весь код не проверен )

ВАРИАНТ 1 – Вызов get_post_meta() один раз

 $meta = get_post_meta( get_the_ID() ); // First make sure we have data before continuing if ( $meta ) : // Get your field values and set defaults $fields = []; $field_names = ['Client', 'Tools', 'About', 'Process']; foreach ( $field_names as $field_name ) { if ( 'About' === $field_name ) { $name = 'AboutTheProject'; } else { $name = $field_name; } $fields[$field_name] = ( isset( $meta['fbb_ProjectData_' . $name] ) ) ? filter_var( $meta['fbb_ProjectData_' . $name][0], FILTER_SANITIZE_STRING ) : ''; } // Lets make sure we have at least one key/value pair with avalue if ( array_filter( $fields ) ) : ?> <div id="fbb_ProjectDataWrap"> <?php // Lets loop through $fields and display them foreach ( $fields as $key=>$field ) : // Make sure $field is not empty, if so, continue if ( !$field ) continue; // We have values, lets display them ?> <div id="fbb_ProjectData_<?php echo $key; ?>" class="fbb_ProjectDataSetSection"> <div class="fbb_Title"> <h5><?php echo $key; ?>:</h5> </div> <ul> <li> <div> <?php echo $field; ?> </div> </li> </ul> </div> <?php endforeach; ?> </div> <?php endi 

е; ENDIF;

ВАРИАНТ 2 – вызов get_post_meta() для каждой клавиши

Поскольку пользовательские поля кэшируются и не уменьшают производительность, если мы вызываем несколько экземпляров get_post_meta() ( см. Связанный пост ), мы можем вызвать get_post_meta() для каждого ключа. Просто не забудьте установить $single to true

 // Get your field values and set defaults $fields = []; $field_names = ['Client', 'Tools', 'About', 'Process']; foreach ( $field_names as $field_name ) { if ( 'About' === $field_name ) { $name = 'AboutTheProject'; } else { $name = $field_name; } $fields[$field_name] = filter_var( get_post_meta( get_the_ID(), 'fbb_ProjectData_' . $name, true ), FILTER_SANITIZE_STRING ); } // Lets make sure we have at least one key/value pair with avalue if ( array_filter( $fields ) ) : ?> <div id="fbb_ProjectDataWrap"> <?php // Lets loop through $fields and display them foreach ( $fields as $key=>$field ) : // Make sure $field is not empty, if so, continue if ( !$field ) continue; // We have values, lets display them ?> <div id="fbb_ProjectData_<?php echo $key; ?>" class="fbb_ProjectDataSetSection"> <div class="fbb_Title"> <h5><?php echo $key; ?>:</h5> </div> <ul> <li> <div> <?php echo $field; ?> </div> </li> </ul> </div> <?php endforeach; ?> </div> <?php endif;