chris
  • 0
Учитель

Есть ли способ «объединить» галереи или показать несколько галерей как одну?

  • 0

Допустим, я веду блог телешоу. Однажды шоу выпускает для публики набор из 10 скриншотов из предстоящего эпизода. Я публикую это в своем блоге либо в виде сообщения с несколькими изображениями, либо в виде сообщения «галерея» — в любом случае читатели могут просматривать все изображения, прикрепленные к этому сообщению, как галерею.

Затем, через несколько дней и несколько постов, они публикуют еще 10 скриншотов из того же предстоящего эпизода. Я хочу сделать отдельный пост, а не поднимать старый, но я также хочу иметь возможность отображать все скриншоты (20) из этого конкретного эпизода в одной галерее. Или хотя бы что бы выглядело как единая галерея.

Возможно? (Желательно без NextGEN или других плагинов… пытаясь сделать как можно больше, используя собственные возможности WordPress, прежде чем добавлять плагины.)

Share
  1. С шорткодом по умолчанию нет простого способа объединить разные галереи в одну. Вы можете указать две разные галереи: одну для текущего поста и одну для другого поста, указанного идентификатором поста:

    
    
    

    Или вы можете создать галерею, явно указав все идентификаторы вложений :

    
    

    Указание нескольких идентификаторов сообщений не будет работать, потому что для получения вложений используется gallery_shortcode(), который использует стандартный класс, а это допускает только числовое значение.get_children() get_posts() WP_Query post_parent

    Однако мы можем использовать тот факт, что в верхней части есть фильтр gallery_shortcode(), который позволяет плагинам переопределять макет галереи по умолчанию. В следующем примере проверяется id параметр с несколькими идентификаторами (или специальное ключевое слово this ), извлекаются все вложения этих сообщений и помещаются в явный include атрибут, который используется для повторного вызова функции галереи. Это позволяет вам комбинировать различные галереи следующим образом:

    . Вы можете расширить эту идею, чтобы поддерживать и другие атрибуты.

    add_filter( 'post_gallery', 'wpse18689_post_gallery', 5, 2 );
    function wpse18689_post_gallery( $gallery, $attr )
    {
        if ( ! is_array( $attr ) || array_key_exists( 'wpse18689_passed', $attr ) ) {
            return '';
        }
        $attr['wpse18689_passed'] = true;
    
        if ( false !== strpos( $attr['id'], ',' ) ) {
            $id_attr = shortcode_atts( array(
                'id' => 'this',
                'order' => 'ASC',
                'orderby'    => 'menu_order ID',
            ), $attr );
            $all_attachment_ids = array();
            $post_ids = explode( ',', $id_attr['id'] );
            foreach ( $post_ids as $post_id ) {
                if ( 'this' == $post_id ) {
                    $post_id = $GLOBALS['post']->ID;
                }
                $post_attachments = get_children( array(
                    'post_parent' => $post_id,
                    'post_status' => 'inherit',
                    'post_type' => 'attachment',
                    'post_mime_type' => 'image',
                    'order' => $id_attr['order'],
                    'orderby' => $id_attr['orderby'],
                ), ARRAY_A );
                $all_attachment_ids = array_merge( $all_attachment_ids, array_keys( $post_attachments ) );
            }
            $attr['include'] = implode( ',', $all_attachment_ids );
            $attr['id'] = null;
        }
    
        return gallery_shortcode( $attr );
    }
    
    • 0
    • @Jan Я думал, что, возможно, можно повторно прикрепить изображения к новому сообщению? Я не пробовал это, хотя, поэтому не знаю точно, сработает ли это…

      • 0
    • @Piet: Вы можете прикрепить изображение только к одному сообщению. Это связано с тем, что «родительский» идентификатор записи хранится в post_parent поле вложения, и он может принимать только одно значение. Есть некоторые плагины, которые обходят это, но они делают это нестандартным способом, и не весь другой код (например, стандартный шорткод) будет с ним работать.

      • 0
    • @Jan Ян, спасибо за объяснение, это действительно имеет смысл 🙂

      • 0
    • Я еще не вникал в такие вещи, как таксономии, но можно ли «пометить» галереи в пользовательской таксономии под названием «альбомы», а затем каким-то образом вызвать альбом, который, по сути, вызовет все идентификаторы вложений всех галерей, помеченных для этого альбома. и отображать его как единую галерею?

      • 0
    • @Chris: Во время мытья посуды твоя идея заставила меня задуматься. Теперь я написал плагин, который «перехватывает» реализацию по умолчанию, чтобы сделать явный запрос вложений нескольких сообщений.

      • 0

Оставить ответ

You must login to add an answer.