Página WordPress / Galeria de Postagens

um pouco de fundo

O WordPress tem a capacidade de anexar imagens a cada página / postagem e, em seguida, exibi-las usando a função get_children com alguns parâmetros para direcionar as imagens.

Eu gosto de usar essas imagens como um simples controle deslizante ou uma imagem estática, o cabeçalho, às vezes o rodapé, etc.

O problema que enfrentei foi que se você inserir qualquer imagem no conteúdo da postagem / página, essa imagem se torna um anexo e, portanto, aparece em qualquer lugar que eu use a função get_children.

Então eu escrevi um shortcode anônimo, que resolve meu problema. Eu uso regex para corresponder a uma palavra como controle deslizante no nome do arquivo e apenas exibir essas imagens. ie: slider_image0.jpg seria mostrado, mas image0.jpg não.

o código

add_shortcode( 'slider_gallery', function( $atts ) {

$defaults
= array(
'show_only' => 'slider',
'img_class' => 'theImage',

);
extract
( shortcode_atts( $defaults, $atts ) );

$post_id
= get_the_ID(); //use post id so this shortcode can be used on any page!

$images
=& get_children( 'post_parent='.$post_id.'&order=ASC&orderby=menu_order&post_type=attachment&post_mime_type=image' );

if ( empty( $images ) ) :
return false;
else :

foreach ( $images as $attachment_id => $attachment ):
$title
= $attachment->post_title;
$imageData
= wp_get_attachment_url( $attachment_id );
preg_match
( '/(.*?)('.$show_only.'.+ ?)/i', $imageData, $matches ); //match all files with 'slider' etc: slider_one.jpg or oneslider.jpg
$media
[] = @$matches[0];
$media
= array_filter( $media );
endforeach
;
foreach ( $media as $m ):
echo
'<img class="'.$img_class.'" src="'.$m.'"/>';
endforeach
;
endif
;

return;

} );

Como usar

isso usará o controle deslizante de parâmetros padrão e a imagem para a classe

[slider_gallery]

ou assim com os dois parâmetros:

[slider_gallery show_only="slider" img_class="theImage"]

qual você substitui o que deseja apenas mostrar e qual classe, por exemplo: gallery_image0.jpg, seria:

[slider_gallery show_only="gallery"]