Kurs WordPress (11)

Autor: Damian Chodorek • Opublikowany: 19 stycznia 2015 • Ostatnia aktualizacja: 8 lutego 2015 • Kategoria: kursy, wordpress

Stwórz własną galerię przy pomocy pluginu.

Z tego artykułu dowiesz się jak utworzyć prosty WordPressowy plugin oraz jak przy jego pomocy stworzyć własną galerię.

Tworzenie pluginu

Pierwszym krokiem jest stworzenie pluginu, który będzie odpowiadał za nową galerię. W tym celu w katalogu wp-content/plugins/ utwórz nowy folder, którego nazwa będzie odpowiadała jego nazwie. Bardzo ważne jest, żeby nazwa katalogu oraz pluginu były unikalne.

W nowo utworzonym folderze, stwórz plik .php o tej samej nazwie. Żeby WP zaczął traktować go jak plugin, musisz go uzupełnić odpowiednimi metadanymi. Przykładowe znajdują się poniżej.

/**
 * Plugin Name: Name of the plugin, must be unique.
 * Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
 * Description: A brief description of the plugin.
 * Version: The plugin's version number. Example: 1.0.0
 * Author: Name of the plugin author
 * Author URI: http://URI_Of_The_Plugin_Author
 * Text Domain: Optional. Plugin's text domain for localization. Example: mytextdomain
 * Domain Path: Optional. Plugin's relative directory path to .mo files. Example: /locale/
 * Network: Optional. Whether the plugin can only be activated network wide. Example: true
 * License: A short license name. Example: GPL2
 */

Pamiętaj, że metadane w postaci powyższego kodu CSS muszą być umieszczone pomiędzy <?php a ?>.

Dzięki temu w panelu admina pojawi się nowa wtyczka. Jej włączenie poskutkuje tym, że WP będzie odpalał kod pluginu przy każdym wejściu na stronę. W pliku, który stworzyłeś, możesz definiować funkcje, korzystać z filtrów i haków. Skorzystamy właśnie z tej funkcjonalności, aby stworzyć własną galerię.

Dodanie własnej galerii

Jeżeli nie wiesz czym są shortcodes to koniecznie przeczytaj poprzednią lekcję, którą znajdziesz na stronie: http://damianchodorek.com/2015/01/06/kurs-wordpress-wlasny-shortcode-galeria-10/.

Jeżeli natomiast jesteś zaznajomiony z tym terminem to wiesz, że utworzenie galerii skutkuje wstawieniem kodu w postaci:

[gallery ids="2238,2237,2069,2054,1989,1999,2000,2023,2040,2279"]

Naszym zadaniem będzie zastąpienie domyślnej funkcji, która obsługuje ten shortcode. Trzeba zrobić dwie rzeczy: usunąć domyślny shortcode galerii i zdefiniować własny.

remove_shortcode('gallery');
add_shortcode('gallery', 'my_gallery');

Musimy jeszcze zdefiniować handler, który obsłuży shortcode gallery, który właśnie zdefiniowaliśmy.

function my_gallery($atts){
 
    global $post;
 
    if ( ! empty( $atts['ids'] ) ){
        if ( empty( $atts['orderby'] ) )
            $atts['orderby'] = 'post__in';
        $atts['include'] = $atts['ids'];
    }
 
    extract(shortcode_atts(array(
        'orderby' => 'menu_order ASC, ID ASC',
        'id' => $post->ID,
        'icontag' => 'dt',
        'captiontag' => 'dd',
        'itemtag' => 'dl',
        'columns' => 3,
        'size' => 'medium',
        'include' => '',
        'link' => 'file'
    ), $atts));
 
 
    $args = array(
        'post_status' => 'inherit',
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'orderby' => $orderby
    );
 
    if ( !empty($include) )
        $args['include'] = $include;
    else {
        $args['post_parent'] = $id;
        $args['numberposts'] = -1;
    }
 
    $imgs = get_posts($args);
     
    foreach ( $imgs as $img ){
        echo '<div>'.wp_get_attachment_image($img->ID, $size).'</div>';
    }
}

Funkcje jest zdefiniowana tak, aby obsługiwać galerie sprzed WordPressa 3.5, w których zdjęcia były przypisane do danego id posta. Nowsze galerie działają trochę inaczej i z tego względu funkcja sprawdza, np. czy korzystamy z atrybutu ids, który świadczy o nowszej wersji galerii.

Zwróć uwagę, że zdjęcia pobieramy funkcją get_posts(), w której zdefiniowany jest 'post_mime_type' => 'image'

Gotowe. Na podstawie shortcode, który zostanie wstawiony w treść postów lub stron, Twoja funkcja wygeneruje kod HTML galerii.

Inny sposób

Sposób stworzenia własnej galerii, który własnie poznałeś, opiera się na usunięciu shortcode’a gallery oraz zdefiniowaniu jeszcze raz, ale z innym handlerem.

Istnieje jeszcze jeden sposób, który pozwala modyfikować galerię. Jest nim filtr post_gallery. Poniżej przedstawiam jego użycie.

function my_gallery_handler( $out = '', $atts, $content = false, $tag = false ) {
    $new_gallery = my_gallery($atts);
    if( $new_gallery ){
        return $new_gallery;
    }else{
        return $out;
    }
}

add_filter( 'post_gallery', 'my_gallery_handler', 10, 4 );

Jak widzisz zasada działania trochę różni się od definiowania własnego shortcode’a, ponieważ tym razem dostajemy do swojej funkcji nie tylko atrybuty, ale także domyślną treść galerii, wygenerowaną przez WP. Możemy ją totalnie zignorować lub zmodyfikować. Parametr $atts przechowuje atrybuty, które zdefiniowano w shortcode galerii.

część 12