[Помогите] Вывести несколько стандартных галерей

Тема в разделе "Wordpress", создана пользователем Skorp1oN, 20 ноя 2011.

Статус темы:
Закрыта.
Модераторы: Sorcus
  1. Skorp1oN

    Skorp1oN

    Регистр.:
    16 дек 2007
    Сообщения:
    368
    Симпатии:
    25
    Версия WP: 3.2.1

    Здравствуйте!
    Подскажите, как можно вывести фотки сразу из нескольких стандартных галерей? Т.е. есть шорткод, которые вывод все изображения только из одной галереи:
    PHP:
    [gallery id="тут id страницы с галереей"]
    Но вот фотки с нескольких, не получается сразу вывести :( Уже пробовал id ставить через запятую и т.п.
    Кто может помочь в этом вопросе?
    Спасибо!
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    да в в функции галереи (gallery_shortcode() в файле wp-includes\media.php ) id фильтруется через функцию intval после которой остаётся только целое число, можно скопировать всю функцию и делать свою как фильтр в function.php для шаблона или как плагин такой:
    PHP:
    <?php
    //Plugin Name: Галерея из кучи постов
    //Version:     1.0

    //деактивируем стандартную функцию галерей
    remove_shortcode('gallery''gallery_shortcode');

    //активируем вместо неё свою
    add_shortcode('gallery''multipost_gallery_shortcode');

    //сама функция
    function multipost_gallery_shortcode($attr) {
    //тут весь код скопированный из gallery_shortcode с изменением, чтоб разпознавал id через запятую
    }
    php?>
    или просто вставить две галерей из обоих постов
    Код:
    [gallery id="1"]
    [gallery id="2"]
    
     
  3. Skorp1oN

    Skorp1oN

    Регистр.:
    16 дек 2007
    Сообщения:
    368
    Симпатии:
    25
    Спасибо конечно)
    Но а как изменить сам код, чтобы работали запятые? Подскажите пожалуйста :)
    Или какие правки в файле media.php надо сделать, чтобы можно было использовать запятую?
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    вот плагин, изменил несколько строк
    PHP:
    <?php
    //Plugin Name: Multipost Gallery
    //Description: Галерея из кучи постов, например [gallery id="1,2,3"]
    //Author:      Polyetilen
    //Version:     1.0

    //деактивируем стандартную функцию галерей
    remove_shortcode('gallery''gallery_shortcode');

    //активируем вместо неё свою
    add_shortcode('gallery''multipost_gallery_shortcode');

    //сама функция
    function multipost_gallery_shortcode($attr) {
        global 
    $post$wp_locale;

        static 
    $instance 0;
        
    $instance++;

        
    // Allow plugins/themes to override the default gallery template.
        
    $output apply_filters('post_gallery'''$attr);
        if ( 
    $output != '' )
            return 
    $output;

        
    // 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);
        //заменяем на это
        
    $ids explode(','$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) );
            //заменяем на это
            
    $attachments = array();
            foreach(
    $ids as $id){
                
    $_attachments get_children( array('post_parent' => $id'post_status' => 'inherit''post_type' => 'attachment''post_mime_type' => 'image''order' => $order'orderby' => $orderby) );
                foreach ( 
    $_attachments as $key => $val ) {
                    
    $attachments[$val->ID] = $_attachments[$key];
                }
            }
        }

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

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

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

        
    $selector "gallery-{$instance}";

        
    $gallery_style $gallery_div '';
        if ( 
    apply_filters'use_default_gallery_style'true ) )
            
    $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 -->"
    ;
        
    $size_class sanitize_html_class$size );
        
    $gallery_div "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>";
        
    $output apply_filters'gallery_style'$gallery_style "\n\t\t" $gallery_div );

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

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

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

        return 
    $output;
    }
    php?>
    или такие же правки можно сделать в файле media.php, но там лучше ничего не изменять, а то после обновления wordpress версии все изменения пропадут.
     

    Вложения:

    Skorp1oN нравится это.
Статус темы:
Закрыта.