Usar um shortcode do WordPress permite a publicação de posts individuais do blog por ID, o número mais recente de posts de uma determinada categoria ou de todas as categorias, paginação opcional, exibição opcional de trecho ou conteúdo completo e metadados opcionais.
Instruções: Adicione o seguinte código ao functions.php do seu tema WordPress para habilitar o novo shortcode.
<?php
/************* SHORTCODES ****************/
//
function showBlogPosts( $atts ) {
extract( shortcode_atts( array(
// what categories to show, default = all.
'cat' => '',
// number of posts
'num' => 5,
'p' => '',
// The following variables work on an "on/off" switch, 1 to allow, 0 to disallow
// excerpt or content. default = excerpt
'excerpt' => 1,
// show meta or not. default = yes
'meta' => 1,
'meta2' => 1,
//paged. default on no. Determines if page should be paginated or not
'pnavi' => 0
), $atts ) );
global $loopMeta, $loopExcerpt, $loopMeta2;
$loopMeta = $meta;
$loopExcerpt = $excerpt;
$loopMeta2 = $meta2;
if ($p != ''){
$posts_per_page = '';
}
wp_reset_query();
global $paged;
$args = array( 'posts_per_page' => $num, 'cat'=> $cat, 'p' => $p );
if($pnavi == 1){
$args['paged'] = get_query_var('page');
}
query_posts($args );
while ( have_posts() ) : the_post();
/* for the loop part, use your own loop.php that contains only the post format.
** See my "micrLoopPart.php" to see how all the options play out
*/
include(locate_template('microLoopPart.php'));
endwhile;
if($pnavi == 1){
echo'<div id="blogNav">';
posts_nav_link( ' ', '»', '«' );
echo '</div>';
}
wp_reset_query();
}
add_shortcode( 'blogPosts', 'showBlogPosts' );
?>
Agora, crie um novo arquivo de template chamado microLoopPart.php na sua pasta raiz e adicione o seguinte loop formatado em micro.
<article id="post-<?php the_ID();?>" <?php post_class($classes);?> ><!-- START OF POST -->
<h1 class="entry-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>" class="url">
<?php the_title(); ?>
</a></h1>
<span class="meta vcard" style=" <?php if($loopMeta == 0){ echo "display:none"; }?> ">
<time class="updated" datetime="<?php
$postDate = get_the_date('c');
$postDate2 = get_the_date('d.m.Y');
echo $postDate ?>" pubdate> <?php echo $postDate2; ?></time>
| <span class="byline fn author">
<?php the_author_posts_link(); ?>
</span> | <a href="mailto:<?php the_author_meta('email'); ?>" class="email author">email</a> |
<?php the_category(', '); ?>
</span></span>
<div class="postContent entry-content">
<?php
if($loopExcerpt == 0){
the_content();
}
else{
if ( has_post_thumbnail() ) {
the_post_thumbnail('thumbnail', array('class' => 'alignleft'));
}
the_excerpt();
echo '<div class="clearfix"></div>';
}
?>
<p class="postmetadata" style=" <?php if($loopMeta2 == 0){ echo "display:none"; }?> ">Posted in
<?php the_category(', '); ?>
<br />
<?php the_tags(); ?>
<br />
Source: <span class="vcard"><span class="source-org copyright">
<?php bloginfo('name'); ?>
</span></span></p>
</div>
</article>
Por último, você precisa adicionar o seguinte shortcode dentro dos seus posts para exibir uma lista de posts formatada em micro.
[blogPosts cat=3 excerpt=0 meta=1 meta1=0 num=2]
Você também pode gostar de verificar se o shortcode já existe.
Erro de análise: erro de sintaxe, '<' inesperado em C:xampp3htdocsmrcwp-contentthemesmrcmicroLoopPart.php na linha 6
Olá,
Eu realmente gosto do seu código, mas como o John disse, a paginação não está funcionando. Ele mostra o link, mas nas páginas seguintes (como a página 2) ele ainda mostra o conteúdo da página um. Alguma ideia?
Atenciosamente
Michael
Obrigado por isso! – Fazer o _excerpt aparecer para posts consultados customizados na barra lateral em *single.php* (estranhamente, funcionou em todas as outras páginas) estava me matando.
Eu tentei criar meu próprio shortcode, mas não consegui fazê-lo funcionar. Isso foi muito útil e resolveu o problema...
Não sei se é um bug no WP 3.3, mas redefinir consultas, rebobinar, tentar três tipos de consulta diferentes – de wp_query a get_posts simplesmente não funcionou em single.php… eu estava apenas tentando criar um loop fora do loop principal – e todos eles funcionaram em *todas as páginas* exceto em posts únicos. Tão frustrante!
obrigado novamente!
Esta é uma ótima contribuição. Obrigado. Tenho um problema com o meu tema. Tudo parece funcionar, exceto quando adiciono a paginação, o link está lá para as páginas e ele vai para essas páginas, mas cada página mostra os posts mais recentes (neste exemplo, os 2 mais recentes) Este é o shortcode que usei. Copiei o código acima sem alterar
[blogPosts
cat=3 excerpt=0 meta=1 meta1=0 num=2 pnavi=1]
Alguma ideia? Usando WP 3.3.1
Obrigado