web-dev-qa-db-fra.com

L'exclusion de l'image sélectionnée du code de la galerie empêche la Lightbox de fonctionner

Je cherchais une solution pour exclure l'image/la vignette en vedette dans chaque message. J'ai donc trouvé cet excellent morceau de code et l'a ajouté à functions.php. . Cela fonctionnait parfaitement, sauf pour une chose: cela rend le plugin Lightbox jQuery inutile.

La différence que je vois dans le code est la suivante. Avec le code:

<a href='http://site.com/wp-content/uploads/2012/01/main-image-2.jpg' title='main-image-2'><img width="150" height="150" src="http://gamebox.la/wp-content/uploads/2012/01/main-image-2-150x150.jpg" class="attachment-thumbnail" alt="main-image-2" title="main-image-2" /></a>

Sans pour autant:

<a href='http://site.com/wp-content/uploads/2012/01/main-image-2.jpg' title='main-image-2' rel="lightbox[170]"><img width="150" height="150" src="http://gamebox.la/wp-content/uploads/2012/01/main-image-2-150x150.jpg" class="attachment-thumbnail" alt="main-image-2" title="main-image-2" /></a>

Il semble que le filtre fasse quelque chose à la post_gallery qui fait que WP ne montre pas la partie Lightbox (rel = "lightbox []" manquant), mais je ne comprends pas pourquoi il le fait.

Code de référence dans functions.php à partir de ici :

function exclude_thumbnail_from_gallery($null, $attr)
{
    if (!$thumbnail_ID = get_post_thumbnail_id())
        return $null; // no point carrying on if no thumbnail ID

    // temporarily remove the filter, otherwise endless loop!
    remove_filter('post_gallery', 'exclude_thumbnail_from_gallery');

    // pop in our excluded thumbnail
    if (!isset($attr['exclude']) || empty($attr['exclude']))
        $attr['exclude'] = array($thumbnail_ID);
    elseif (is_array($attr['exclude']))
        $attr['exclude'][] = $thumbnail_ID;

    // now manually invoke the shortcode handler
    $gallery = gallery_shortcode($attr);

    // add the filter back
    add_filter('post_gallery', 'exclude_thumbnail_from_gallery', 10, 2);

    // return output to the calling instance of gallery_shortcode()
    return $gallery;
}
add_filter('post_gallery', 'exclude_thumbnail_from_gallery', 10, 2);

Merci beaucoup d'avance!

UPDATE: J'ai trouvé ceci http://core.trac.wordpress.org/ticket/14130 il dit qu'il ajoute le filtre post_gallery_output mais je ne peux pas comprendre ce que je dois modifier dans le code actuel pour essayer une autre solution.

1
Alekz

J'ai résolu cela en utilisant ce code

function exclude_thumbnail_from_gallery($null, $attr)
{
    if (!$thumbnail_ID = get_post_thumbnail_id())
        return $null; // no point carrying on if no thumbnail ID

    // temporarily remove the filter, otherwise endless loop!
    remove_filter('post_gallery', 'exclude_thumbnail_from_gallery');

    // pop in our excluded thumbnail
    if (!isset($attr['exclude']) || empty($attr['exclude']))
        $attr['exclude'] = array($thumbnail_ID);
    elseif (is_array($attr['exclude']))
        $attr['exclude'][] = $thumbnail_ID;

    // now manually invoke the shortcode handler
    $gallery = gallery_shortcode($attr);

    // add the filter back
    add_filter('post_gallery', 'exclude_thumbnail_from_gallery', 10, 2);

    // return output to the calling instance of gallery_shortcode()
    return $gallery;
}
add_filter('post_gallery', 'exclude_thumbnail_from_gallery', 10, 2);

Ensuite, désinstallez le plug-in Lightbox for Galleries puis installez le jQuery Lightbox For Native Galleries .

Merci à tous pour vos suggestions et votre aide! :)

1
Alekz