Wie kann der Galerie-Shortcode eine einzige UL-Liste anstatt mehrerer DL ausgeben?

Ich brauche den integrierten Gallerie-Shortcode, um UL anstelle von DL auszugeben. Wie kann ich es tun? Ich weiß, dass ich den “post_gallery” -Filter verwenden kann, aber das bedeutet fast, dass du die gallery_shortcode-function des Mediums duplizierst. Ich würde gerne eine weniger “ausführliche” Lösung finden.

Vielen Dank

Solutions Collecting From Web of "Wie kann der Galerie-Shortcode eine einzige UL-Liste anstatt mehrerer DL ausgeben?"

Ok, also habe ich die Galerie-Shortcode-function umgeschrieben, indem ich das Original kopiert und entfernt / hinzugefügt / geändert habe, was ich brauchte, und jetzt teile ich es mit dir. Die wichtigsten Dinge, die ich hinzugefügt / geändert habe, sind:

  • Eine einzige UL / LI-Liste pro Galerie anstelle eines DL für jeden verdammten Gegenstand.
  • ‘Itemtag’ attr entfernt, da es keinen Sinn macht, ein anderes Tag für Objekte innerhalb eines UL zu verwenden
  • ‘icontag’ ist jetzt standardmäßig ‘figure’, ‘captiontag’ ist jetzt standardmäßig ‘p’
  • new ‘class’ attr zum Hinzufügen einer benutzerdefinierten class zum Container UL
  • neue ‘first-in-row’, ‘last-in-row’, ‘first-row’, ‘last-row’ Hilfsklassen für LI-Items (obwohl ich dringend die Verwendung von nth-child css selectors empfehle)

Hier ist der Code:

//remove styles: I'll use mine add_filter('use_default_gallery_style','__return_false'); //remove default shortcode remove_shortcode('gallery'); //add new shortcode add_shortcode('gallery', 'custom_gallery'); function custom_gallery($attr) { $post = get_post(); static $instance = 0; $instance++; if(!empty($attr['ids'])){ // 'ids' is explicitly ordered, unless you specify otherwise. if(empty($attr['orderby'])){ $attr['orderby'] = 'post__in'; } $attr['include'] = $attr['ids']; } $output = ''; // We're trusting author input, so let's at least make sure it looks like a valid orderby statement if(isset($attr['orderby'])){ $attr['orderby'] = sanitize_sql_orderby($attr['orderby']); if(!$attr['orderby']) unset($attr['orderby']); } extract(shortcode_atts(array( 'order' => 'ASC', 'orderby' => 'menu_order ID', 'id' => $post ? $post->ID : 0, 'icontag' => 'figure', 'captiontag' => 'p', 'columns' => 3, 'size' => 'thumbnail', 'include' => '', 'exclude' => '', 'link' => '', 'class' => ''//now you can add custom class to container UL ), $attr, 'gallery')); $id = intval($id); if('RAND' == $order) $orderby = 'none'; if(!empty($include)){ $_attachments = get_posts(array( 'include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby )); $attachments = array(); foreach($_attachments as $key => $val){ $attachments[$val->ID] = $_attachments[$key]; } } elseif (!empty($exclude)){ $attachments = get_children(array( 'post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby )); } else { $attachments = get_children(array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby )); } if(empty($attachments)) return ''; //if ( is_feed() ) //removed, see original in media.php $itemtag = tag_escape('li');//new tag for item $captiontag = tag_escape($captiontag); $icontag = tag_escape($icontag); //valid tags check removed, see original in media.php $columns = intval($columns); $selector = "gallery-{$instance}"; $size_class = sanitize_html_class( $size ); //new tag for container $output = "\n
"; return $output; }//end custom gallery

Und nur um den Galerie-Shortcode “Kapitel” zu vervollständigen, hier zeige ich Ihnen, wie Sie schließlich die Standard- und / oder benutzerdefinierten Attribute programmatisch ändern können. Sagen wir zum Beispiel, ich muss die Größe attr basierend auf der Anzahl der Elemente ändern:

 add_filter('shortcode_atts_gallery','set_gallery_thumbs_size',10,3); function set_gallery_thumbs_size($out, $pairs, $atts) { //in this case, if size was defined by the user, keep original and stop here if(isset($atts['size'])) return $out; //get number of images $c = count(explode(',',$atts['ids'])); //set different sizes based on items count //new sizes were created with add_image_size() and image_size_names_choose filter (see wp docs) $atts['size'] = ($c > 2) ? 'thumb-3c' : ( ($c > 1) ? 'thumb-2c' : 'thumbnail'); //merge original array with new one and return it return array_merge($out,$atts); } 

Ich hoffe, es wird anderen Leuten helfen, die nach einem saubereren Galerie-Markup suchen.

Sie können die folgenden Attribute für den Galerie-Shortcode verwenden:

 [gallery itemtag="ul" icontag="li" captiontag="li"] 

Das Problem dabei ist, dass der Galerie-Shortcode das Bild und die Beschriftung in verschiedene Elemente einbindet (deshalb verwendet die Standardlösung dl-dt-dd), so dass ein li-Element für das Bild und eines für die Beschriftung generiert wird. Sie können es jedoch weiterhin mit CSS formatieren, da beide Elemente eindeutige classnnamen haben.