¿Cómo arreglar manualmente el código de la galería de WordPress usando PHP en functions.php?
Se ha hablado muchas veces que WordPress genera un código bastante deficiente para la función integrada de galería.
Este es el código central responsable de la salida de la galería (en /wp-includes/media.php):
function gallery_shortcode($attr) {
global $post;
static $instance = 0;
$instance++;
// Permitir que los plugins/temas sobreescriban la plantilla predeterminada de la galería
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
// Confiamos en la entrada del autor, así que al menos asegurémonos de que parece una declaración orderby válida
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>
<!-- ver gallery_shortcode() en 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;
}
¿Qué me gustaría arreglar?
[1] El código anterior genera estilos CSS directamente en la entrada. Quiero detener eso, ya que puedo agregar fácilmente el mismo código CSS en mi archivo style.css.
[2] Quiero deshabilitar el código que muestra las leyendas de las imágenes debajo de sus miniaturas. Quiero que las leyendas se muestren solo en las páginas de adjuntos, y no en la entrada.
[3] El código mencionado agrega dos elementos <br style="clear: both;">
después del código de la galería. También me gustaría deshabilitar eso, ya que puedo usar "margin" en el código CSS para eso.
Me gustaría lograr las "TRES" cosas anteriores usando código PHP en el archivo functions.php
, ya que no se recomienda editar los archivos del núcleo.
Espero que alguien pueda ayudar. (No sé programar, así que, por favor, sean lo más claros posible.) ¡Gracias!
RELEVANTE: El archivo fuente a consultar es /wp-includes/media.php
(aquí está la versión trunk -- buscar la función gallery_shortcode
).
Como se mencionó anteriormente, eliminar el shortcode y volver a agregarlo no es compatible con otros plugins que modifican galerías, por lo que en su lugar puedes usar el hook de filtro post_gallery
y el mismo código de la función gallery_shortcode
pero con tus propias modificaciones. Por ejemplo, he comentado las partes que no deseas:
function fix_my_gallery_wpse43558($output, $attr) {
global $post;
static $instance = 0;
$instance++;
/**
* Eliminaremos esto ya que no queremos un bucle infinito aquí
*/
// Permite que plugins/themes sobrescriban la plantilla de galería por defecto.
//$output = apply_filters('post_gallery', '', $attr);
// Confiamos en la entrada del autor, pero al menos aseguramos que parezca una declaración orderby válida
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 ) )
/**
* Este es el CSS que deseas eliminar
* Punto #1 en la pregunta
*/
/*
$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>
<!-- ver gallery_shortcode() en 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}>";
/*
* Esta es la parte del caption, así que la comentaré
* Punto #2 en la pregunta
*/
/*
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" />';
}
/**
* Este es el br extra que deseas eliminar, así que lo cambiamos por solo la etiqueta de cierre div
* Punto #3 en la pregunta
*/
/*$output .= "
<br style='clear: both;' />
</div>\n";
*/
$output .= "</div>\n";
return $output;
}
add_filter("post_gallery", "fix_my_gallery_wpse43558",10,2);

De hecho, en el comentario existente, mira el código largo bajo EDIT. Hace lo mismo :)

El primer bloque de código que empieza con function my_own_gallery($output, $attr) { ...

Mira la edición de badlearner abajo
Puedes eliminar el shortcode por defecto y crear el tuyo propio. Así (en tu functions.php):
remove_shortcode( 'gallery' );
function my_own_gallary() {
// Código de la galería
}
add_shortcode( 'gallery' , 'my_own_gallary' );
La forma más fácil de modificar el shortcode es copiar y pegar en tu functions.php y cambiar el nombre de la función a algo como my_own_gallary
y comenzar a editar.
EDITADO
Como goldenapples señaló en los comentarios: Existe un filtro para el shortcode de galería, así que no es necesario eliminar el shortcode primero.
Ejemplo que puedes usar en tu functions.php (la salida es como el shortcode de galería por defecto, así que puedes modificarlo).
function my_own_gallery($output, $attr) {
global $post;
static $instance = 0;
$instance++;
// Confiamos en la entrada del autor, pero al menos aseguramos que parezca una declaración orderby válida
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>
<!-- ver gallery_shortcode() en 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);
Explicación: En el shortcode definido por WordPress verás:
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
Esto significa que si se aplica un filtro y devuelve algo, eso será usado (devuelto), de lo contrario la función continúa (shortcode por defecto).
Para añadir un filtro usas la función add_filter. El primer argumento es la etiqueta del filtro (en este caso 'post_gallery'), el segundo la función a añadir (la función que devolverá tu salida personalizada de la galería).
Así que esto mostrará "test" para el shortcode [gallery]:
function my_own_gallery($output, $attr) {
return 'test';
}
add_filter("post_gallery", "my_own_gallery",10,2);
En mi ejemplo de edición abajo verás el add_filter para crear el shortcode por defecto con tu propio código editable. Puedes editar esto, o comenzar desde cero como prefieras.
(EDITADO por Otto: Lo anterior ha sido corregido por Otto. @RobVermeer faltaba el primer parámetro del filtro y no hizo correctamente el add_filter. El filtro post_gallery es la forma correcta de hacer esto. Eliminar el shortcode y volver a añadirlo (como intentó badlearner abajo) no es recomendable ya que es incompatible con otros plugins que también modifican galerías.)
Añadido/Editado por badlearner:
El método de filtro para modificar el código de la galería (en /wp-includes/media.php) usando functions.php, proporcionado por @RobVermeer no parece estar funcionando correctamente (ver los comentarios de esta respuesta).
Pero la primera respuesta de @RobVermeer (es decir, antes de la primera edición), que desregistra el shortcode de galería y registra un nuevo shortcode de galería, funcionó. Y aquí está el código, y Por favor, siéntete libre de editar o añadir una respuesta si hay una mejor manera.
Lo siguiente es el código que debe añadirse en el archivo functions.php de tu tema:
<?php
remove_shortcode( 'gallery' );
add_shortcode( 'gallery' , 'my_own_gallary' );
function my_own_gallary($attr) {
global $post;
static $instance = 0;
$instance++;
// Permite que plugins/temas anulen la plantilla de galería por defecto.
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
// Confiamos en la entrada del autor, pero al menos aseguramos que parezca una declaración orderby válida
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;
}
?>

¿y cuál será el nuevo shortcode para la galería? ¿[gallery]
mismo o algo diferente?

Efectivamente será [gallery]
. Si copias y pegas esto en tu function.php verás exactamente la misma salida en tus posts. Pero si editas el código puedes personalizarlo a tu gusto.

En realidad no necesitas eliminar el shortcode completo y volverlo a añadir. Si miras cerca de la parte superior de la función de galería de WordPress, hay un filtro llamado 'post_gallery'. Si ese filtro devuelve algo, WordPress lo usará como salida de la galería en lugar de su propia salida. Así que solo añade tu marcado como un filtro en 'post_gallery'.

@goldenapples Pasé por alto ese. Gracias, esa es efectivamente la forma correcta de hacerlo.

voy a robar esto. odio el marcado de la galería Y especialmente el de los pies de foto...

@goldenapples ¿puedes ser un poco más claro? (No sé cómo codificar.) ¿Tal vez tu propia respuesta? ¿por favor? Gracias.

@RobVermeer si lo que dijo 'goldenapples' tuvo sentido para ti, ¿puedes explicarlo también editando tu respuesta? Gracias.

Un poco más de información en mi respuesta actualizada, espero que esto ayude.

@RobVermeer Parece que no funciona en publicaciones con múltiples galerías. Es decir... cuando coloco galerías de publicaciones o páginas existentes en una nueva publicación usando [gallery id="n"]
, las galerías no se muestran. En cambio, solo veo la misma imagen de la nueva publicación. Por favor, mira esta página como ejemplo: http://ow.ly/9ivOY.

@RobVermeer Este es el código original de la galería de /wp-includes/media.php: http://pastebin.com/JStF2V41 ... Y esto es lo que estoy usando en mi functions.php: http://pastebin.com/1Q0iuvBn ... ¿Podrías verificar si estoy haciendo algo mal? (Por favor busca las etiquetas <!--REMOVED CODE HERE-->
y <!--CHANGED CODE HERE-->
en el último.)

@RobVermeer ¡NO! Por favor busca <!--REMOVED CODE HERE-->
y <!--CHANGED CODE HERE-->
en el código y compara esos en ambos documentos. Notarás la diferencia.

@RobVermeer Incluso el código predeterminado que proporcionaste no parece estar funcionando.

bueno, sigue estando allí en la nueva versión de WordPress a partir de la 3.8 aquí está la corrección que hice para eliminar eso, utilicé el mismo código anterior pero añadí un par de líneas
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.">";
/* añadí el <dd> aquí para corregir el error de validación */
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;
}

Por favor, agrega una explicación adecuada a tus respuestas para cumplir con los estándares de calidad de [wordpress.se] - para empezar, lee [answer].
