Ich bin kein Programmierer, also habe ich keine Ahnung von Lösungen. Ich habe CMB2 für einen benutzerdefinierten Post-Typ Portfolio/Projekt verwendet.Wie Gruppenfeldmetadaten + Container div angezeigt wird, wenn es existiert und Standardtext anzeigen, wenn Felder leer sind? [CMB2]
Ich habe eine Diashow integriert, die Metadaten für Gruppenfelder für jede Folie verwendet.
Auf der Homepage gibt es 2 Beiträge mit der Bezeichnung "Empty Project" & "Test Project 1". Wenn Sie auf das Empty Project klicken, werden Sie zur einzelnen Post-Seite weitergeleitet, dort sehen Sie ein ".flexslider" div mit einem roten Hintergrund. Das ist das div, das ich entfernen möchte, wenn die Gruppenfelder leer sind. Meine, die ich meine, vervollständige entfernen das div, das keine leeren divs zurücklässt, anstatt die Hintergrundfarbe zu weiß zu ändern.
Wenn Sie auf "Test Project 1" klicken, werden die Bilder mit wiederholbaren Gruppenfeldern innerhalb der "flexslider" Diashow hochgeladen. Das ist das Ergebnis von Metafields, die mit Metadaten darin gespeichert wurden.
METABOX // Hier ist der Code habe ich verwendet die wiederholbaren Felder zu registrieren, die mir Bilder und Beschriftungen für die Diashow einfügen können.
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',
));
}
Ich folgte this für die Gruppenfelder Meta-Daten anzuzeigen. Alles funktioniert völlig in Ordnung, wenn ich dieses Stück Code verwenden:
FRONT-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>
aber ich würde sehr gerne den .flexslider
Container + Metadaten anzuzeigen NUR, wenn Daten vorhanden sind. Wenn Felder leer sind, möchte ich Standardtext anzeigen oder besser noch das ganze div selbst entfernen. Ich habe versucht mein Bestes zu tun, aber ich kann nicht herausfinden, was falsch ist.
Ich habe auch versucht, dieses Stück Code auch:
VERSUCH //
<?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>';
}
}
?>
Das einzig gute an dem obigen Code ist, dass es auf jeden Fall die div entfernt, wenn MetaField ist leer, aber wenn die Metadaten existieren, ist das div immer noch nicht da.
EDIT // Ich habe versucht, "@stweb" Code in den Antworten unter Verwendung von:
$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>';
}
aber nichts passiert ... die rote div sitzt nur da statt zu verschwinden.
Ich würde im Grunde gerne herausfinden, wie ich den ersten Teil des Codes NUR anzeigen kann, wenn Bilder in Gruppenfeld hochgeladen wurden, und wenn nicht, dann nichts anzeigen, nicht einmal das Container-Div.
Kann mir bitte jemand erklären, wo ich falsch gelaufen bin?
Das ist nicht für die Ausgabe funktionierte ich hatte, trotzdem danke. – KXXT
Der von Ihnen bereitgestellte Code entfernt das Container-Div nicht, wenn die Felder leer sind. – KXXT
Müssen Sie den Container anzeigen, wenn sowohl image_id als auch image_caption gesetzt sind? – stweb