Отображать название метабокса для настраиваемых полей со значениями

Я использую несколько групп метаболизма в своих письмах. В моих функциях я регистрирую несколько обменных ящиков:

$prefix = 'dbt_'; $meta_boxes = array(); $meta_boxes[] = array( 'id' => 'general_information', 'title' => 'General Information', 'pages' => array('post', 'page', 'link'), // multiple post types, accept custom post types 'context' => 'normal', // normal, advanced, side (optional) 'priority' => 'high', // high, low (optional) 'fields' => array( array( 'name' => 'Name', 'id' => $prefix . 'name', 'type' => 'text', 'std' => 'default value here' ), array( 'name' => 'Manufacturer', 'id' => $prefix . 'manufacturer', 'type' => 'text', 'std' => '' ) $meta_boxes[] = array( 'id' => 'measurements', 'title' => 'Measurements', 'pages' => array('post', 'page', 'link'), // multiple post types, accept custom post types 'context' => 'normal', // normal, advanced, side (optional) 'priority' => 'high', // high, low (optional) 'fields' => array( array( 'name' => 'Length', 'id' => $prefix . 'length', 'type' => 'text', 'std' => '' ), array( 'name' => 'Width', 'id' => $prefix . 'width', 'type' => 'text', 'std' => '' ) ..etc 

В моей теме я показываю имя и значения каждого поля в каждой группе метаболизма. Цель состоит в том, чтобы поля, сгруппированные по обмену, в противном случае я бы просто использовал get_post_custom($post_id) .

Код в single.php:

 global $meta_boxes; foreach ( $meta_boxes as $metabox ) { echo $metabox['title']; foreach ( $metabox['fields'] as $field ) { $meta = get_post_meta($post->ID, $field['id'], true); //get post meta from each metabox if(!isset($meta[0])) continue; //display only fields with values echo $field['name']; echo $meta ? $meta : $field['std']; //show value or default value } } 

Если, например, у метабокса нет полей со значениями, заголовок метабокса $metabox['title'] все еще появляется. Как я могу скрыть заголовок метабокса, если нет значений?

Вы можете добавить еще один простой цикл foreach, чтобы проверить, есть ли у вас какие-либо значения:

 foreach ( $meta_boxes as $metabox ) { $has_value = false foreach ( $metabox['fields'] as $field ) { $meta = get_post_meta($post->ID, $field['id'], true); if(!isset($meta[0])){ $need_title = true; break; } } if ($has_value){ echo $metabox['title']; foreach ( $metabox['fields'] as $field ) { $meta = get_post_meta($post->ID, $field['id'], true); //get post meta from each metabox if(!isset($meta[0])) continue; //display only fields with values echo $field['name']; echo $meta ? $meta : $field['std']; //show value or default value } } }