2016-08-01 35 views
5

Programcı değilim, bu yüzden çözümler konusunda emin değilim. Bir Portföy/Proje özel posta türü için CMB2 kullanıyorum.Grup Alanı meta verileri + Kapsayıcı div varsa ve alanlar boşsa varsayılan metni nasıl görüntülenir? [CMB2]

Her slayt için Grup Alanı meta verilerini kullanan bir slayt gösterisi ekledim.

Ana sayfada "Boş Proje" etiketli 2 ileti var & "Test Projesi 1". Boş Projeye tıklarsanız, tek bir gönderi sayfasına yönlendirileceksiniz, orada kırmızı bir arka plana sahip bir ".flexslider" div göreceksiniz. Grup Alanları boşsa kaldırmak istediğim div. Demek istediğim, arka plan rengini beyaza değiştirmek yerine boş boşluk bırakmayan div'u tamamladım.

"Proje 1'i Test Et" i tıklarsanız, "flexslider" slayt gösterisinde Tekrarlanabilir Grup Alanları kullanılarak yüklenen görüntüler olacaktır. Bu, içindeki Meta Veri ile kaydedilen Metafields'ın sonucudur.

METABOX İşte // beni Slayt gösterisi için görüntü ve altyazı eklemek için izin verir ben tekrarlanabilir alanları kayıt için kullandığınız koddur.

add_action('cmb2_admin_init', 'gallery_metabox'); 
function gallery_metabox() { 
$prefix = 'gallery_'; 

/** 
* Repeatable Field Groups 
*/ 
$cmb_group = new_cmb2_box(array(
    'id'   => $prefix . 'metabox', 
    'title'  => __('Gallery', 'cmb2'), 
    'object_types' => array('portfolio',), 
)); 

// $group_field_id is the field id string, so in this case: $prefix . 'demo' 
$group_field_id = $cmb_group->add_field(array(
    'id'   => $prefix . 'demo', 
    'type'  => 'group', 
    'options'  => array(
    'group_title' => __('Image {#}', 'cmb2'), // {#} gets replaced by row number 
     'add_button' => __('Add Another Image', 'cmb2'), 
     'remove_button' => __('Remove Image', 'cmb2'), 
     'sortable'  => true, // beta 
     'closed'  => true, // true to have the groups closed by default 
    ), 
)); 


$cmb_group->add_group_field($group_field_id, array(
    'name' => __('Image', 'cmb2'), 
    'id' => 'image', 
    'type' => 'file', 
)); 

$cmb_group->add_group_field($group_field_id, array(
    'name' => __('Image Caption', 'cmb2'), 
    'id' => 'image_caption', 
    'type' => 'text', 
)); 

} 

Bu grup alanları için meta verileri görüntülemek için this'u izledim.

ÖN-END //

<div class="flexslider"> 
    <ul class="slides"> 

      <?php $entries = get_post_meta(get_the_ID(), 'gallery_demo', true); 


       foreach ((array) $entries as $key => $entry) { 

        $img = $img_url = $caption = ''; 
       if (isset($entry['image_id'])) { 
        $img = wp_get_attachment_image($entry['image_id'], 'share-pick', null, array(
         'class' => 'thumb', 
        )); 
       } 
        if (isset($entry['image_id'])) { 
        $img_url = wp_get_attachment_image_url($entry['image_id'], null); 
       } 
       $caption = isset($entry['image_caption']) ? wpautop($entry['image_caption']) : ''; 
        echo '<li data-thumb="'. $img_url .'">'; 
        echo $img; 
        echo $caption; 
        echo '</li>'; 


      } ?> 
    </ul> 
    </div> 

ama çok veri var SADECE .flexslider kabı + meta verilerini görüntülemek istiyorum: Ben bu kod öbek kullandığınızda Her şey mükemmel çalışıyor. Alanlar boşsa, varsayılan metni veya daha iyisi görüntülemek istiyorum ancak tüm divun kendisini kaldırırım. Araştırma yapmak için elimden geleni yaptım ama neyin yanlış olduğunu anlayamıyorum.

Ben de hem bu kod yığın denedim:

ATTEMPT //

<?php $entries = get_post_meta(get_the_ID(), 'gallery_demo', true); 
if(empty ($entry)) { echo ''; } 
else { 
    foreach ((array) $entries as $key => $entry) { 
    echo '<div class="flexslider">'; 
    echo '<ul class="slides">'; 
    $img = $img_url = $caption = ''; 

    if (isset($entry['image_id'])) { 
    $img = wp_get_attachment_image($entry['image_id'], 'share-pick', null, array(
'class' => 'thumb', 
    )); 
} 

if (isset($entry['image_id'])) { 
    $img_url = wp_get_attachment_image_url($entry['image_id'], null); 
} 

$caption = isset($entry['image_caption']) ? wpautop($entry['image_caption']) : ''; 
    echo '<li data-thumb="'. $img_url .'">'; 
    echo $img; 
    echo $caption; 
    echo '</li>'; 
    echo '</ul>'; 
    echo '</div>';  
    } 
    } 
?> 

Yukarıdaki kod hakkında sadece iyi bir şey metafield olduğunda kesinlikle div kaldırır olmasıdır boş ama meta veri var ise div hala gitti. kırmızı div sadece yerine kaybolan orada oturur ...

$entries = get_post_meta(get_the_ID(), 'gallery_demo', true); 

foreach ((array) $entries as $key => $entry) { 
    if(empty($entry)){ 
     continue; 
    } 
    echo '<div class="flexslider">'; 
    echo '<ul class="slides">'; 
    $img = $img_url = $caption = ''; 

    if (isset($entry['image_id'])) { 
    $img = wp_get_attachment_image($entry['image_id'], 'share-pick', 
    null, array( 'class' => 'thumb',)); 
    } 

    if (isset($entry['image_id'])) { 
    $img_url = wp_get_attachment_image_url($entry['image_id'], null); 
    } 

    $caption = isset($entry['image_caption']) ? wpautop( 
    $entry['image_caption']) : ''; 
    echo '<li data-thumb="'. $img_url .'">'; 
    echo $img; 
    echo $caption; 
    echo '</li>'; 
    echo '</ul>'; 
    echo '</div>';  
} 

ama hiçbir şey olmuyor: DÜZENLEME //

aşağıda cevapları "@stweb" kodunu kullanarak çalıştı.

Temel olarak, görüntüler Grup Alanı'na yüklendiyse ve daha sonra konteyner div'unda bile hiçbir şey gösterilmiyorsa YALNIZCA kodun ilk kümesini nasıl görüntüleyebileceğimi anlamak isterim.

Nerede yanlış gittiğimi açıklayan herhangi biri olabilir mi?

cevap

2

bu deneyin:

$entries = get_post_meta(get_the_ID(), 'gallery_demo', true); 

foreach ((array) $entries as $key => $entry) { 
    if(empty($entry)){ 
     continue; 
    } 
    echo '<div class="flexslider">'; 
    echo '<ul class="slides">'; 
    $img = $img_url = $caption = ''; 

    if (isset($entry['image_id'])) { 
    $img = wp_get_attachment_image($entry['image_id'], 'share-pick', 
    null, array( 'class' => 'thumb',)); 
    } 

    if (isset($entry['image_id'])) { 
    $img_url = wp_get_attachment_image_url($entry['image_id'], null); 
    } 

    $caption = isset($entry['image_caption']) ? wpautop( 
    $entry['image_caption']) : ''; 
    echo '<li data-thumb="'. $img_url .'">'; 
    echo $img; 
    echo $caption; 
    echo '</li>'; 
    echo '</ul>'; 
    echo '</div>';  
} 

GÜNCELLEME:

foreach ((array) $entries as $key => $entry) { 
    if (!isset($entry['image_id']) || $entry['image_id'] == '' ) { 
     continue; 
    } 
    echo '<div class="flexslider">'; 
    echo '<ul class="slides">'; 
    $img = $img_url = $caption = ''; 

    if (isset($entry['image_id'])) { 
     $img = wp_get_attachment_image($entry['image_id'], 'share-pick', 
     null, array( 'class' => 'thumb',)); 
    } 

    if (isset($entry['image_id'])) { 
     $img_url = wp_get_attachment_image_url($entry['image_id'], null); 
    } 

    $caption = isset($entry['image_caption']) ? wpautop(   
    $entry['image_caption']) : ''; 
    echo '<li data-thumb="'. $img_url .'">'; 
    echo $img; 
    echo $caption; 
    echo '</li>'; 
    echo '</ul>'; 
    echo '</div>';  
} 
+0

Zaten bu, ben olmamdı sorun için teşekkür çalışmadı. – KXXT

+0

Sağladığınız kod, alanlar boşsa, container div'i kaldırmaz. – KXXT

+0

Hem image_id hem de image_caption ayarlanmışsa kabı göstermeniz gerekiyor mu? – stweb

İlgili konular