add_filter e variando as legendas de saída da galeria de imagens

Gostaria de alterar apenas um produto da WP Gallery nativa (em media.php)

O autor Smashing Magazine ( link ) aconselha a alterar toda a function gallery_shortcode. Mas eu me perguntei se é possível mudar apenas a saída específica ($ captiontag)

Eu escrevi:

add_filter( 'captiontag', 'my_captiontag' ); function my_captiontag( $captiontag ) { $output .= " 

" . wptexturize($attachment->post_excerpt) . "

"; }

mas não funciona 🙁

Solutions Collecting From Web of "add_filter e variando as legendas de saída da galeria de imagens"

Não há nenhum gancho de filtro chamado captiontag . Você pode alterar o valor da legenda tag html especificando a opção de captiontag ao inserir o shortcode [gallery] .

Da página de codex shortcode da galeria :

captiontag

o nome da etiqueta XHTML usada para include cada legenda. O padrão é “dd”. Por exemplo, para alterar a marcação da galeria para usar tags div, span e p:

 [gallery itemtag="div" icontag="span" captiontag="p"] 

Atualizar:

O código a seguir replaceá a saída padrão da [gallery] . É basicamente uma cópia da function gallery_shotcode() com uma modificação para exibir o título da imagem envolvido na tag

antes da imagem:

 add_filter('post_gallery', 'my_gallery_shortcode', 10, 2); function my_gallery_shortcode($output, $attr) { global $post; static $instance = 0; $instance++; // 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); 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 = "  "; $size_class = sanitize_html_class( $size ); $gallery_div = "\n"; return $output; } 

Não é necessário copiar o shortcode da gallery . Basta configurar a sua function de filtro entre a saída do manipulador nativo e a saída final.

Para fazer isso, segure o manipulador de código curto, então execute um preg_replace_callback() sobre a saída.

 add_action( 'after_setup_theme', 'wpse_74515_replace_gallery_shortcode' ); /** * Replace the default shortcode handlers. * * @wp-hook after_setup_theme * @return void */ function wpse_74515_replace_gallery_shortcode() { // overwrite the native shortcode handler add_shortcode( 'gallery', 'wpse_74515_gallery_shortcode' ); } /** * Create a filtered gallery output. * * @wp-hook gallery * @param array $attr * @return string */ function wpse_74515_gallery_shortcode( $attr ) { // Default value in WordPress. $captiontag = 'dd'; // User value. isset ( $attr['captiontag'] ) && $captiontag = $attr['captiontag']; // Let WordPress create the regular gallery … $gallery = gallery_shortcode( $attr ); // change the content of the caption $gallery = preg_replace_callback( '~(< ' . $captiontag . '.*>)(.*)()~mUus', 'wpse_74515_gallery_callback', $gallery ); return $gallery; } /** * Change the result of the regex match from wpse_74515_gallery_shortcode. * * @param array $m matches * @return string */ function wpse_74515_gallery_callback( $m ) { return $m[1] . wptexturize( $m[2] ) . $m[3]; } 

Postagens semelhantes

  • Como eu link as miniaturas da galeria para url diferente usando a galeria nativa do wp?
  • Usando preg_replace para separar a galeria do conteúdo?
  • Como faço para que todas as imagens da galeria sejam abertas em uma nova janela?