J'essaie d'ajouter un conteneur div à la galerie WordPress, je l'ai jusqu'à présent ....
function gallery_custom( $output ) {
$return = '<div class="mydiv">';
$return = $output;
$return = '</div>';
return $return;
}
add_filter( 'post_gallery', 'gallery_custom', 10, 3 );
Cela ne retourne rien, des idées où je me trompe?
Pour ce faire, vous devez développer plus de code personnalisé, comme suit.
function gallery_custom( $output, $attr ) {
global $post;
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->ID,
'itemtag' => 'dl',
'icontag' => 'dt',
'captiontag' => 'dd',
'columns' => 3,
'size' => 'thumbnail',
'include' => '',
'exclude' => ''
), $attr ));
$id = intval( $id );
if ('Rand' == $order ) $orderby = 'none';
if ( ! empty( $include ) ) {
$include = preg_replace('/[^0-9,]+/', '', $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];
}
}
if ( empty( $attachments ) ) return '';
$output = '<div class="mydiv">';
// Here's your actual output, you may customize it to your need
$output .= "<div class='gallery galleryid-$columns gallery-columns-$columns gallery-size-$size'>";
// Now you loop through each attachment
foreach ( $attachments as $id => $attachment ) {
// Fetch the thumbnail (or full image, it's up to you)
$img = wp_get_attachment_image_src( $id, $size );
$output .= '<figure class="gallery-item"><div class="gallery-icon landscape">';
$output .= '<img src="' . $img[0] . '" width="' . $img[1] . '" height="' . $img[2] . '" alt="" />';
$output .= '</div>';
if ( $captiontag && trim($attachment->post_excerpt) ) {
$output .= "
<{$captiontag} class='gallery-caption'>
" . wptexturize($attachment->post_excerpt) . "
</{$captiontag}>";
}
$output .= '</figure>';
}
$output .= '</div></div>';
return $output;
}
add_filter( 'post_gallery', 'gallery_custom', 10, 2 );
L'ajout d'un wrapper HTML à la galerie peut être effectué à l'aide du filtre post_gallery
. Voici un exemple entièrement commenté.
add_filter( 'post_gallery', 'gallery_custom', 10, 3 );
/**
* Filters the default gallery shortcode output.
*
* If the filtered output isn't empty, it will be used instead of generating
* the default gallery template.
*
* @see gallery_shortcode()
*
* @param string $output The gallery output. Default empty.
* @param array $attr Attributes of the gallery shortcode.
* @param int $instance Unique numeric ID of this gallery shortcode instance.
*/
function gallery_custom( $output, $attr, $instance ) {
// Remove the filter to prevent infinite loop.
remove_filter( 'post_gallery', 'gallery_custom', 10, 3 );
// Add opening wrapper.
$return = '<div class="mydiv">';
// Generate the standard gallery output.
$return .= gallery_shortcode( $attr );
// Add closing wrapper.
$return .= '</div>';
// Add the filter for subsequent calls to gallery shortcode.
add_filter( 'post_gallery', 'gallery_custom', 10, 3 );
// Finally, return the output.
return $return;
}
Dans gallery_custom()
, il est important de supprimer le filtre post_gallery
avant d'appeler gallery_shortcode()
, faute de quoi nous aurions une boucle infinie.
Notez que la sortie doit être concaténée à $return
. $return
est continuellement écrasé dans votre code d'origine car =
est utilisé à la place de .=
après l'initialisation de la chaîne.
La sortie principale est générée à l'aide de la fonction de sortie standard de la galerie, gallery_shortcode( $attr );
. Notre filtre ne sera pas appliqué dans cet appel car nous l'avons supprimé à ce stade.
Une fois que la sortie de la galerie a été concaténée à $return
, nous ajoutons la balise HTML de fermeture et ajoutons notre filtre afin qu’il soit exécuté à la prochaine appel de la fonction de shortcode de la galerie.
Enfin nous retournons la sortie.
[gallery]
shortcode:Voici une autre approche pour résoudre le problème. Cette fois, la fonction de sortie de galerie par défaut, gallery_shortcode()
, est supprimée de la chaîne de shortcode gallery
. Ensuite, une fonction de remplacement, wpse_custom_gallery_shortcode()
, est connectée à la chaîne de shortcode gallery
d'origine.
// Replace the default [gallery] shortcode function with a custom function.
add_action( 'init', 'wpse_replace_gallery_shortcode' );
function wpse_replace_gallery_shortcode() {
remove_shortcode( 'gallery', 'gallery_shortcode' );
add_shortcode( 'gallery', 'wpse_custom_gallery_shortcode' );
}
// Customized gallery shortcode function.
// See gallery_shortcode() for documentation.
function wpse_custom_gallery_shortcode( $attr ) {
$gallery = gallery_shortcode( $attr );
if ( $gallery ) {
return '<div class="mydiv">' . $gallery . '</div>';
}
}