web-dev-qa-db-fra.com

Ajouter un conteneur div à la galerie à l'aide de post_gallery

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?

1
fightstarr20

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 );
2
Vinod Dalvi

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.

Autre solution: remplacer la fonction [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>';
    }
} 
2
Dave Romsey