Filtr dnia: shortcode_atts_{$shortcode}

Jedna z pierwszych rzeczy z WP 3.6, którą już wykorzystuję jest filtr na który już dawno czekałem, bo wzmianki o tym filtrze pojawiły się gdzieś na początku roku.

Ale do rzeczy! Przypomnij sobie kod, który pozwalał na domyślne linkowanie plików galerii w WordPress.

Jak widać główna instrukcja oparta była o wyrażenie regularne i nie jest to konstrukcja elegancka, a dodatkowo może zdublować parametr link.

preg_replace( '/(\[ gallery[^\]]*)\]/', "$1 link=\"file\"]", $content );

Dziś ten sam kod można zrobić po prostu łatwiej:

class iWorks_Default_Gallery_Link
{
    public function __construct()
    {
        add_filter( 'shortcode_atts_gallery', array( &$this, 'shortcode_atts_gallery' ), 10, 3 );
    }
    public function shortcode_atts_gallery( $out, $pairs, $atts )
    {
        $out['link'] = 'file';
        return $out;
    }
}

Poprawka! Można by, ale jest drobniutki błąd w 3.6. Shortcode gallery nie pozwala na zmianę atrybutu link. Więc zgłosiłem błąd: #24979.

Jeżeli więc, chcesz użyć „nowego” kodu, to wcześniej musisz dodać patch z powyższego ticketa.

Domyślne linkowanie plików galerii w WordPress

Bardzo krótko i bardzo szybko. Kod powoduje, że galerie linkują do pliku graficznego, a nie do strony załącznika. Jest odpowiedzią na pytanie zadane na twarzoksiążce.

class iWorks_Default_Gallery_Link
{
    public function __construct()
    {
        add_filter( 'the_content', array( &$this, 'the_content' ), 1 );
    }
 
    public function the_content( $content )
    {
        return preg_replace( '/(\[ gallery[^\]]*)\]/', "$1 link=\"file\"]", $content );
    }
 
}
new iWorks_Default_Gallery_Link();

Uwaga w kodzie na stronie jest błąd w preg_replace, bo w tym miejscu pojawiała się galeria :D Jeżeli kopiujesz powyższy kod, usuń spację między [ a słowem gallery.

pobierz plik: iworks-gallery-default-file.php-.zip

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu

Asynchronicznie ładowana galeria

Na zamówienie klienta stworzyłem wtyczkę WordPress z asynchroniczną galerię. Galeria jest ładowana dopiero po załadowaniu strony, a sam proces pobierania podzielony jest na dwie części: pierwsza pobiera stronicowaną listę miniaturek, a druga sam obrazek.

Sama lista w celu zmniejszenia transferu jest podzielona na paczki, które można doładować, klikając w „pobierz więcej”.

Wtyczka nadpisuje standardowy shortcode [gallery], dzięki czemu użycie jest absolutnie przeźroczyste dla redaktorów.

Obsłużyłem też część standardowych parametrów, pomijając te, które przybierają wartości predefiniowane.

Po zdjęciach w galerii można się poruszać za pomocą strzałek strzałka w prawo → ładuje następne zdjęcie, natomiast strzałka w lewo → poprzednie.

zobacz na autikult.pl
przykładowe użycie galerii