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"]