X

Shortcode com Loop Micro Formatado, Meta, Categoria, Paginação

Snippets por IsItWP

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( ' ', '&raquo;', '&laquo;' );
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.

Comentários   Deixe uma resposta

  1. Erro de análise: erro de sintaxe, '<' inesperado em C:xampp3htdocsmrcwp-contentthemesmrcmicroLoopPart.php na linha 6

  2. 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

  3. 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!

  4. 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

Adicionar um comentário

Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!