Архив

WordPress — gallery shorttag highslide

Два примера, для решения одной и той же задачи.

В первом примере полный идиотизм, во втором хорошее решение. Вот теперь вопрос, почему большая часть всех CMS работает как первый пример. ?

Убого:

add_filter('wp_get_attachment_link', 'add_rel');

/*
 * Add rel="gallery-$id" to attachment links
 */

function add_rel ( $link )
{

    global $post;
    // a mild cheat. group by post id. the gallery_shortcode() $instance
    // static var would be better, but we can't get to it.
    $id = $post->ID;

    // First, see if there's already a 'rel' attribute in the link:
    $atag = preg_match( '#<a \s+(.*?)(rel=([\'"])(.*?)\3)(.*?)>(.*)#i', $link, $matches );
    if ( $atag )
    {
        // Match found. Let's put Humpty Dumpty back together again:
        $quot = $matches [ 3 ];
        $relval = $quot . $matches [ 4 ] . " gallery-{$id}" . $quot;
        $before = $matches [ 1 ];
        $after = $matches [ 5 ];
        $rest = $matches [ 6 ];
        $link = "</a><a {$before}rel={$relval}{$after}>{$rest}";
    }
    else
    {
        $atag = preg_match( '#</a><a \s+(.*?)>(.*)#i', $link, $matches );
        if ( $atag )
        {
            // This is a much simpler reassembly
            $innards = $matches [ 1 ];
            $rest = $matches [ 2 ];
            $relval = "gallery-{$id}";
            $link = "</a><a {$innards} rel='{$relval}'>{$rest}";
        }
    }
    return $link;
}

Нормально:

function gallery_image_higslide()
{
    var gallery = $('.gallery').find('a');

    $.each( gallery, function() {
        var img = $(this).find('img');

        if( $(img).size() > 0 && $(this).attr('onclick') == undefined ){
           $(this).addClass('highslide-image').click(function(){ return hs.expand(this); });
        }
    });
}

$(document).ready(function(){
    gallery_image_higslide();
});