Как исправить код галереи WordPress вручную с помощью PHP в functions.php?
Много раз обсуждалось, что WordPress генерирует некачественный код для встроенной функции галереи.
Это основной код, отвечающий за вывод галереи (в /wp-includes/media.php):
function gallery_shortcode($attr) {
global $post;
static $instance = 0;
$instance++;
// Позволяет плагинам/темам переопределить шаблон галереи по умолчанию
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
// Проверяем входные данные автора, убедимся что orderby выглядит как корректный оператор
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}";
$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>
<!-- см. gallery_shortcode() в 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, $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='wp-caption-text 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;
}
Что я хотел бы исправить?
[1] Приведенный выше код выводит CSS стили прямо в пост. Я хочу это остановить, так как могу легко добавить тот же CSS код в мой файл style.css.
[2] Я хочу отключить вывод подписей к изображениям под их миниатюрами. Я хочу, чтобы подписи отображались только на страницах вложений, а не в посте.
[3] Вышеупомянутый код добавляет два элемента <br style="clear: both;">
после кода галереи. Я также хотел бы отключить это, поскольку могу использовать "margin" в CSS коде для этого.
Я хотел бы реализовать эти "ТРИ" вещи, используя PHP код в файле functions.php
, так как редактирование основных файлов не рекомендуется.
Надеюсь, кто-то сможет помочь. (Я не знаю как программировать, поэтому, пожалуйста, будьте максимально понятны.) Спасибо!
ВАЖНО: Исходный файл для просмотра находится в /wp-includes/media.php
(вот trunk версия -- ищите функцию gallery_shortcode
).
Как упоминалось ранее, удаление шорткода и его повторное добавление несовместимо с другими плагинами, изменяющими галереи, поэтому вместо этого следует использовать хук фильтра post_gallery
и тот же код из функции gallery_shortcode
, но с вашими собственными изменениями. Например, я закомментировал части, которые вам не нужны:
function fix_my_gallery_wpse43558($output, $attr) {
global $post;
static $instance = 0;
$instance++;
/**
* Удалим это, так как нам не нужен бесконечный цикл здесь
*/
// Позволяем плагинам/темам переопределить шаблон галереи по умолчанию.
//$output = apply_filters('post_gallery', '', $attr);
// Мы доверяем вводу автора, но давайте хотя бы убедимся, что это похоже на допустимое выражение orderby
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}";
$gallery_style = $gallery_div = '';
if ( apply_filters( 'use_default_gallery_style', true ) )
/**
* Это CSS, который вы хотите удалить
* #1 в вопросе
*/
/*
$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>
<!-- см. gallery_shortcode() в 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, $size, false, false) : wp_get_attachment_link($id, $size, true, false);
$output .= "<{$itemtag} class='gallery-item'>";
$output .= "
<{$icontag} class='gallery-icon'>
$link
</{$icontag}>";
/*
* Это часть с подписями, поэтому я закомментирую её
* #2 в вопросе
*/
/*
if ( $captiontag && trim($attachment->post_excerpt) ) {
$output .= "
<{$captiontag} class='wp-caption-text gallery-caption'>
" . wptexturize($attachment->post_excerpt) . "
</{$captiontag}>";
}*/
$output .= "</{$itemtag}>";
if ( $columns > 0 && ++$i % $columns == 0 )
$output .= '<br style="clear: both" />';
}
/**
* Это дополнительный br, который вы хотите удалить, поэтому мы заменим его на просто закрывающий тег div
* #3 в вопросе
*/
/*$output .= "
<br style='clear: both;' />
</div>\n";
*/
$output .= "</div>\n";
return $output;
}
add_filter("post_gallery", "fix_my_gallery_wpse43558",10,2);

На самом деле, в существующем комментарии посмотрите длинный код под EDIT. Он делает то же самое :)

Первый блок кода, который начинается с function my_own_gallery($output, $attr) { ...

Смотрите правки badlearner ниже
Вы можете удалить шорткод по умолчанию и создать свой собственный. Например так (в functions.php):
remove_shortcode( 'gallery' );
function my_own_gallary() {
// Код галереи
}
add_shortcode( 'gallery' , 'my_own_gallary' );
Самый простой способ изменить шорткод - скопировать его в ваш functions.php, изменить имя функции на что-то вроде my_own_gallary
и начать редактирование.
ПРАВКА
Как отметил goldenapples в комментариях: Для шорткода галереи есть фильтр, поэтому нет необходимости сначала удалять шорткод.
Пример, который можно использовать в functions.php (вывод такой же, как у шорткода галереи по умолчанию, поэтому вы можете его изменить).
function my_own_gallery($output, $attr) {
global $post;
static $instance = 0;
$instance++;
// Мы доверяем вводу автора, но давайте хотя бы убедимся, что это похоже на корректный параметр orderby
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}";
$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, $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='wp-caption-text 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;
}
add_filter("post_gallery", "my_own_gallery",10,2);
Объяснение: В шорткоде, определенном WordPress, вы увидите:
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
Это означает, что если применен фильтр и он что-то возвращает, это будет использовано (возвращено), в противном случае функция продолжит работу (шорткод по умолчанию).
Чтобы добавить фильтр, используйте функцию add_filter. Первый аргумент - это тег фильтра (в данном случае 'post_gallery'), второй - функция, которую нужно добавить (функция, которая будет возвращать ваш пользовательский вывод галереи).
Таким образом, это будет выводить "test" для шорткода [gallery]:
function my_own_gallery($output, $attr) {
return 'test';
}
add_filter("post_gallery", "my_own_gallery",10,2);
В моем примере ниже вы увидите add_filter для создания шорткода по умолчанию с вашим собственным редактируемым кодом. Вы можете редактировать его или начать с нуля, как вам угодно.
(ПРАВКА от Otto: Вышеуказанное было исправлено Otto. @RobVermeer пропустил первый параметр фильтра и не сделал add_filter правильно. Фильтр post_gallery - это правильный способ сделать это. Удаление шорткода и его повторное добавление (как пробовал badlearner ниже) не рекомендуется, так как это несовместимо с другими плагинами, которые также изменяют галереи.)
Добавлено/отредактировано badlearner:
Метод изменения кода галереи (в /wp-includes/media.php) с использованием фильтра в functions.php, предложенный @RobVermeer, похоже, не работает должным образом (см. комментарии к этому ответу).
Но первый ответ @RobVermeer (т.е. до первой правки), который отменяет регистрацию шорткода галереи и регистрирует новый шорткод галереи, сработал. И вот код, и Пожалуйста, не стесняйтесь редактировать или добавлять ответ, если есть лучший способ.
Следующий код нужно добавить в файл functions.php вашей темы:
<?php
remove_shortcode( 'gallery' );
add_shortcode( 'gallery' , 'my_own_gallary' );
function my_own_gallary($attr) {
global $post;
static $instance = 0;
$instance++;
// Позволяем плагинам/темам переопределить шаблон галереи по умолчанию.
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
// Мы доверяем вводу автора, но давайте хотя бы убедимся, что это похоже на корректный параметр orderby
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}";
$gallery_style = $gallery_div = '';
if ( apply_filters( 'use_default_gallery_style', true ) )
$gallery_style = "
<style type='text/css'>
#{$selector} .gallery-item {
width: {$itemwidth}%;
}
</style>";
$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, $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 .= "";
}
$output .= "</{$itemtag}>";
if ( $columns > 0 && ++$i % $columns == 0 )
$output .= '';
}
$output .= "
<div style='clear:both;'></div>
</div>\n";
return $output;
}
?>

и каков будет новый шорткод для галереи? [gallery]
или что-то другое?

Да, именно [gallery]
. Если вы скопируете и вставите это в ваш function.php, вы увидите точно такой же вывод в ваших записях. Но если вы отредактируете код, то сможете сделать его своим.

Вам на самом деле не нужно удалять весь шорткод и добавлять его заново. Если вы посмотрите в начале функции галереи WordPress, там есть фильтр под названием 'post_gallery'. Если этот фильтр возвращает что-либо, WordPress будет использовать это как вывод галереи вместо своего собственного вывода. Так что просто добавьте вашу разметку как фильтр на 'post_gallery'.

@goldenapples Упустил этот момент. Спасибо, это действительно правильный способ.

собираюсь украсть это. ненавижу разметку галереи И особенно подписей...

@goldenapples не мог бы ты пояснить немного подробнее? (Я не умею программировать.) Может, ты сам напишешь ответ? Пожалуйста? Спасибо.

@RobVermeer если то, что сказал 'goldenapples', имеет для тебя смысл, не мог бы ты тоже объяснить это, отредактировав свой ответ? Спасибо.

Добавил немного больше информации в обновленном ответе, надеюсь, это поможет.

@RobVermeer Похоже, это не работает с постами, содержащими несколько галерей. То есть... когда я добавляю галереи из существующих постов или страниц в новый пост с помощью [gallery id="n"]
, галереи не отображаются. Вместо этого я вижу только одно изображение из нового поста. Пожалуйста, посмотрите эту страницу для примера: http://ow.ly/9ivOY.

@RobVermeer Вот оригинальный код галереи из /wp-includes/media.php: http://pastebin.com/JStF2V41 ... А это то, что я использую в своем functions.php: http://pastebin.com/1Q0iuvBn ... Не могли бы вы проверить, делаю ли я что-то неправильно? (Обратите внимание на теги <!--REMOVED CODE HERE-->
и <!--CHANGED CODE HERE-->
во втором файле.)

@RobVermeer НЕТ! Пожалуйста, найдите <!--REMOVED CODE HERE-->
и <!--CHANGED CODE HERE-->
в коде и сравните их в обоих документах. Вы заметите разницу.

@RobVermeer Даже стандартный код, который вы предоставили, похоже, не работает.

@RobVermeer Я отредактировал ваш ответ, посмотрите, сможете ли вы помочь.

этот код по-прежнему присутствует в новой версии WordPress начиная с 3.8 вот исправление, которое я сделал для его удаления, используя тот же код выше, но добавив пару строк
remove_shortcode( "gallery" );
add_shortcode( "gallery" , "my_own_gallary" );
function my_own_gallary( $attr ) {
global $post;
static $instance = 0;
$instance++;
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' ) {
return $output;
}
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;
$gallery_style = $gallery_div = '';
if ( apply_filters( 'use_default_gallery_style', true ) )
$gallery_style = "
<style type='text/css'>
#".$selector." .gallery-item {
width: ".$itemwidth."%;
}
</style>";
$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, $size, false, false) : wp_get_attachment_link($id, $size, true, false);
$output .= "<".$itemtag." class='gallery-item'>";
$output .= "
<".$icontag." class='gallery-icon'>
$link
</".$icontag.">";
/* добавил <dd> здесь, чтобы исправить ошибку валидации */
if ( $captiontag && trim($attachment->post_excerpt) ) {
$output .= "
<".$captiontag." class='wp-caption-text gallery-caption'>
" . wptexturize($attachment->post_excerpt) . "
</".$captiontag.">";
} else {
$output .= "
<".$captiontag." class='wp-caption-text gallery-caption' style='display:none;'></".$captiontag.">";
}
$output .= "</".$itemtag.">";
if ( $columns > 0 && ++$i % $columns == 0 )
$output .= '';
}
$output .= "
<div style='clear:both;'></div>
</div>\n";
return $output;
}

Пожалуйста, добавьте подробное объяснение к вашим ответам, чтобы соответствовать стандартам качества [wordpress.se] - для начала ознакомьтесь с [ответом].
