WP resim galerisi kısa kodunun çıktısını bir eklentiden nasıl özelleştirebilirim?


17

Mesajları gösteren bir eklenti oluşturuyoruz ve ayrıca bir yayında kullanıldığında resim galerisini de görüntülemek istiyoruz. Ancak, görüntülenen fotoğraf sayısını sınırlamamız mı gerekiyor? Mümkün mü?

Yanıtlar:


36

Bununla ilgili iki yol vardır, ancak her ikisi de mevcut galeri kısa kod işleviyle hemen hemen aynı işlevi gören bir işlev oluşturmayı içerir ...

Ya yapabilirsiniz ..

  1. Üzerine Hook post_galleryve gelen verileri işlemek (eğer gerekirse filtre için bir üs olarak galeri shortcode işlevini kullanabilirsiniz)
  2. Galeri kısa kodunun kaydını kaldırın ve değişikliklerle yeni bir galeri kısa kodunu kaydedin (gerekirse gerekirse mevcut işlevi temel olarak kullanabilirsiniz)

Ben bu iş parçacığında benzer bir şey yaptım , ve ben sadece aşağıdaki örnek için aynı yaklaşımı alacağım çünkü atıfta bulunuyorum.

Galeri kısa kodu için örnek filtre

add_filter( 'post_gallery', 'my_post_gallery', 10, 2 );
function my_post_gallery( $output, $attr) {
    global $post, $wp_locale;

    static $instance = 0;
    $instance++;

    // We're trusting author input, so let's at least make sure it looks like a valid orderby statement
    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];
        }
    } elseif ( !empty($exclude) ) {
        $exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
        $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
    } else {
        $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
    }

    if ( empty($attachments) )
        return '';

    if ( is_feed() ) {
        $output = "\n";
        foreach ( $attachments as $att_id => $attachment )
            $output .= wp_get_attachment_link($att_id, $size, true) . "\n";
        return $output;
    }

    $itemtag = tag_escape($itemtag);
    $captiontag = tag_escape($captiontag);
    $columns = intval($columns);
    $itemwidth = $columns > 0 ? floor(100/$columns) : 100;
    $float = is_rtl() ? 'right' : 'left';

    $selector = "gallery-{$instance}";

    $output = apply_filters('gallery_style', "
        <style type='text/css'>
            #{$selector} {
                margin: auto;
            }
            #{$selector} .gallery-item {
                float: {$float};
                margin-top: 10px;
                text-align: center;
                width: {$itemwidth}%;           }
            #{$selector} img {
                border: 2px solid #cfcfcf;
            }
            #{$selector} .gallery-caption {
                margin-left: 0;
            }
        </style>
        <!-- see gallery_shortcode() in wp-includes/media.php -->
        <div id='$selector' class='gallery galleryid-{$id}'>");

    $i = 0;
    foreach ( $attachments as $id => $attachment ) {
        $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);

        $output .= "<{$itemtag} class='gallery-item'>";
        $output .= "
            <{$icontag} class='gallery-icon'>
                $link
            </{$icontag}>";
        if ( $captiontag && trim($attachment->post_excerpt) ) {
            $output .= "
                <{$captiontag} class='gallery-caption'>
                " . wptexturize($attachment->post_excerpt) . "
                </{$captiontag}>";
        }
        $output .= "</{$itemtag}>";
        if ( $columns > 0 && ++$i % $columns == 0 )
            $output .= '<br style="clear: both" />';
    }

    $output .= "
            <br style='clear: both;' />
        </div>\n";

    return $output;
}

İstediğiniz kısıtlamaları uygulamak için bu işlevi değiştirin (sadece bir temeldir).

wp-includes/media.phpKullandığım kancayı galeri kısa kod geri arama fonksiyonunun içinde bulabilirsiniz (bkz. Satır 763).

http://core.trac.wordpress.org/browser/tags/3.0.1/wp-includes/media.php#L745

Umarım yardımcı olur.. :)


ipucu için teşekkürler. Bu **** filtreyi şimdi 2 saat aradım. +1
kaiser

WP 4.2.2'de 'orderby' => 'menu_order ID' artık çalışmıyor mu?
Fıstık

-2

Her galeri için görüntü sayısını belirleyebilirsiniz. Bu, yazı düzenleyicideki medya kalın kutusundaki galeri sekmesi aracılığıyla yapılandırılabilir. Galeriyi ekledikten sonra galeriyi görsel düzenleyicide düzenleyerek düzenleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.