gallery_shortcode() │ WP 2.5.0 Функція, яка замінює шоткод у тексті статті. Ця функція відповідає за відображення WordPress галерей у записі.
Використовуючи хуки з цієї функції, можна частково або повністю змінити виведення галереї. Наприклад, використовуючи перший хук apply_filters('post_gallery', '', $attr )
, ми можемо повністю змінити висновок, тобто. повністю замінити функцію gallery_shortcode() на свою (див. пр. 3).
Повертає Строку
.
Використання gallery_shortcode($attr);
$attr
(масив) (обов’язковий) Атрибути на основі яких будуватимуться HTML галереї.
order Порядок сортування картинок, можливо: ASC
, DESC
. За замовчуванням: ‘ASC’
orderby Поле, по якому картинки будуть сортуватися. Може бути назвою будь-якої колонки таблиці wp_posts (там зберігаються дані картинок). Ось поля, які можуть використовуватися в першу чергу: post_title
, ID
, post_author
, post_date
, post_name
. За замовчуванням: ‘menu_order ID’
id ID посту, до якого належить галерея.
itemtag HTML тег для кожної картинки. Можливо: dl
або figure
(для HTML5, коли включена підтримка HTML5 ). За замовчуванням: ‘dl’
captiontag HTML тег для кожного підпису картинки (caption). Можливо: dd
або figcaption
(HTML5).
columns Кількість колонок у галереї. Типово: 3
size Розмір картинки у галереї. За замовчуванням: ‘thumbnail’
ids Список ID вкладень (самих картинок), через кому (ці ID вказуються в шорткоді як правило). За замовчуванням: ”
include ID картинок (вкладень), через кому. Докладніше дивіться у параметрі include у get_posts() . Якщо вказати цей параметр, параметр ids
ігнорується. За замовчуванням: ”
exclude ID картинок, які потрібно показувати. Пропустить картинки навіть якщо вони вказані у шорткоді галереї. За замовчуванням: ”
link Куди посилатиметься картинка. Можливо: file
, none
. За замовчуванням: ” (порожньо – посилання на сторінку вкладення) Приклади #1 Відключимо дефолтні css стилі у галерей За допомогою хука use_default_gallery_style ми можемо видалити стилі галереї, що додаються за умовчанням, і стилізувати виведення галереї за своїм, у файлі стилів теми. Код потрібно вставити у файл теми functions.php :
// Відключимо дефолтні css стилі у галерей
add_filter( 'use_default_gallery_style', '__return_false'); А так виглядають стилі:
<style type="text/css">
#gallery-1 {
margin: auto;
}
#gallery-1 .gallery-item {
float: left;
margin-top: 10px;
text-align: center;
width: 20%;
}
#gallery-1 img {
border: 2px solid #cfcfcf;
}
#gallery-1 .gallery-caption {
margin-left: 0;
}
/* see gallery_shortcode() in wp-includes/media.php */
</style> #2 Видалимо рамку у картинок За допомогою фільтра gallery_style можна змінити стилі, що вставляються. Щоб не переписувати їх усі (хоча там мало). Наприклад, давайте видалимо рамку у картинок:
add_filter('gallery_style', function( $str ){
return str_replace('border: 2px solid #cfcfcf;', '', $str );
}); #3 Повністю замінимо функцію gallery_shortcode() на свою Використовуючи хук post_gallery у файлі шаблону або плагіні, ми можемо повністю замінити роботу функції gallery_shortcode() на початковому етапі:
/*
* Зміна виведення галереї через шоткод
* Дивитися функцію gallery_shortcode в http://wp-kama.ru/filecode/wp-includes/media.php
* $output = apply_filters( 'post_gallery', '', $attr );
*/
add_filter('post_gallery', 'my_gallery_output', 10, 2);
function my_gallery_output( $output, $attr ){
$ids_arr = explode(',', $attr['ids']);
$ids_arr = array_map('trim', $ids_arr);
$ Pictures = get_posts (array (
'posts_per_page' => -1,
'post__in' => $ids_arr,
'post_type' => 'attachment',
'orderby' => 'post__in',
)));
if( ! $pictures ) return 'Запит повернув порожній результат.';
// Висновок
$out = '<dl class="gallery_photos">';
// Виводимо кожну картинку з галереї
foreach( $pictures as $pic ){
$src = $pic->guid;
$ t = esc_attr ($ pic-> post_title);
$title = ( $t && false === strpos($src, $t) ) ? $t : '';
$caption = ( $pic->post_excerpt != '' ? $pic->post_excerpt : $title );
$out.='
<dt>
<a href="'. esc_url($src) .'"><img src="'. kama_thumb_src('w=185&h=120&src='. $src ) .'" alt="'. $title .'" /></a>'.
( $caption ? "<span class='caption'>$caption</span>" : '' ) .
'</dt>';
}
$out .= '</dl>';
return $out;
} Додати свій приклад
список змін Код gallery_shortcode() gallery shortcode WP 6.0.2 function gallery_shortcode( $attr ) {
$post = get_post();
static $instance = 0;
$instance++;
if ( ! empty( $attr['ids'] ) ) {
// 'ids' is explicitly ordered, unless you specify otherwise.
if ( empty( $attr['orderby'] ) ) {
$attr['orderby'] = 'post__in';
}
$attr['include'] = $attr['ids'];
}
/**
* Filters default gallery shortcode output.
*
* Якщо фільтрований output isn't empty, it will be used instead of generating
* the default gallery template.
*
* @ Since 2.5.0
* @since 4.2.0 The `$instance` parameter was added.
*
* @see gallery_shortcode()
*
* @param string $output Gallery output. Default empty.
* @param array $attr Атрибути галереї shortcode.
* @param int $instance Unique numeric ID of this gallery shortcode instance.
*/
$output = apply_filters( 'post_gallery', '', $attr, $instance );
if ( ! empty( $output ) ) {
return $output;
}
$html5 = current_theme_supports( 'html5', 'gallery' );
$atts = shortcode_atts(
array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post? $post->ID : 0,
'itemtag' => $html5? 'figure' : 'dl',
'icontag' => $html5? 'div' : 'dt',
'captiontag' => $html5? 'figcaption' : 'dd',
'columns' => 3,
'size' => 'thumbnail',
'include' => '',
'exclude' => '',
'link' => '',
),
$attr,
'gallery'
);
$id = (int) $atts['id'];
if ( ! empty( $atts['include'] ) ) {
$_attachments = get_posts(
array(
'include' => $atts['include'],
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => $atts['order'],
'orderby' => $atts['orderby'],
)
);
$attachments = array();
foreach ( $_attachments as $key => $val ) {
$attachments[ $val->ID ] = $_attachments[ $key ];
}
} elseif ( ! empty( $atts['exclude'] ) ) {
$attachments = get_children(
array(
'post_parent' => $id,
'exclude' => $atts['exclude'],
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => $atts['order'],
'orderby' => $atts['orderby'],
)
);
} else {
$attachments = get_children(
array(
'post_parent' => $id,
'post_status' => 'inherit',
'post_type' => 'attachment',
'post_mime_type' => 'image',
'order' => $atts['order'],
'orderby' => $atts['orderby'],
)
);
}
if (empty($attachments)) {
return '';
}
if ( is_feed() ) {
$output = "n";
foreach ( $attachments as $att_id => $attachment ) {
if ( ! empty( $atts['link'] ) ) {
if ( 'none' === $atts['link'] ) {
$output .= wp_get_attachment_image( $att_id, $atts['size'], false, $attr );
} else {
$output .= wp_get_attachment_link( $att_id, $atts['size'], false );
}
} else {
$output .= wp_get_attachment_link( $att_id, $atts['size'], true );
}
$output .= "n";
}
return $output;
}
$itemtag = tag_escape($atts['itemtag']);
$captiontag = tag_escape($atts['captiontag']);
$icontag = tag_escape( $atts['icontag'] );
$valid_tags = wp_kses_allowed_html( 'post');
if ( ! isset( $valid_tags[ $itemtag ] ) ) {
$itemtag = 'dl';
}
if ( ! isset( $valid_tags[ $captiontag ] ) ) {
$captiontag = 'dd';
}
if ( ! isset( $valid_tags[ $icontag ] ) ) {
$icontag = 'dt';
}
$columns = (int) $atts['columns'];
$itemwidth = $columns > 0? floor( 100 / $columns ) : 100;
$float = is_rtl()? 'right' : 'left';
$selector = "gallery-{$instance}";
$gallery_style = '';
/**
* Filters whether to print default gallery styles.
*
* @ Since 3.1.0
*
* @param bool $print Whether to print default gallery styles.
* Defaults to false if the theme supports HTML5 галереї.
* Otherwise, defaults to true.
*/
if ( apply_filters( 'use_default_gallery_style', ! $html5 ) ) {
$type_attr = current_theme_supports( 'html5', 'style' ) ? '' : ' type="text/css"';
$gallery_style = "
<style{$type_attr}>
#{$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;
}
/* see gallery_shortcode() in wp-includes/media.php */
</style>ntt";
}
$size_class = sanitize_html_class( is_array( $atts['size'] ) ? implode( 'x', $atts['size'] ) : $atts['size'] );
$gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>";
/**
* Filters default gallery shortcode CSS styles.
*
* @ Since 2.5.0
*
* @param string $gallery_style Default CSS styles and opening HTML div container
* для gallery shortcode output.
*/
$output = apply_filters( 'gallery_style', $gallery_style . $gallery_div );
$i = 0;
foreach ( $attachments as $id => $attachment ) {
$attr = (trim($attachment->post_excerpt))? array( 'aria-describedby' => "$selector-$id" ) : '';
if ( ! empty( $atts['link'] ) && 'file' === $atts['link'] ) {
$image_output = wp_get_attachment_link( $id, $atts['size'], false, false, false, $attr );
} elseif ( ! empty( $atts['link'] ) && 'none' === $atts['link'] ) {
$image_output = wp_get_attachment_image( $id, $atts['size'], false, $attr );
} else {
$image_output = wp_get_attachment_link( $id, $atts['size'], true, false, false, $attr );
}
$image_meta = wp_get_attachment_metadata($id);
$orientation = '';
if ( isset( $image_meta['height'], $image_meta['width'] ) ) {
$orientation = ( $image_meta['height'] > $image_meta['width'] ) ? 'portrait' : 'landscape';
}
$output .= "<{$itemtag} class='gallery-item'>";
$output .= "
<{$icontag} class='gallery-icon {$orientation}'>
$image_output
</{$icontag}>";
if ( $captiontag && trim( $attachment->post_excerpt ) ) {
$output .= "
<{$captiontag} class='wp-caption-text gallery-caption' id='$selector-$id'>
" . wptexturize( $attachment->post_excerpt ) . "
</{$captiontag}>";
}
$output .= "</{$itemtag}>";
if ( ! $html5 && $columns > 0 && 0 === ++$i % $columns ) {
$output .= '<br style="clear: both" />';
}
}
if ( ! $html5 && $columns > 0 && 0 !== $i % $columns ) {
$output .= "
<br style='clear: both' />";
}
$output .= "
</div>n";
return $output;
} Зв’язані функції