X

Shortcode con bucle microformateado, meta, categoría, paginación

Snippets de IsItWP

Usar un shortcode de WordPress te permite publicar entradas individuales de blog basadas en ID, el número más reciente de entradas de blog de una categoría específica o de todas las categorías, paginación opcional, mostrar opcionalmente un extracto o el contenido completo y metadatos opcionales.

Instrucciones: Agrega el siguiente código al archivo functions.php de tu tema de WordPress para habilitar el nuevo 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' );
?>

Ahora, crea un nuevo archivo de plantilla llamado microLoopPart.php en tu carpeta raíz y agrega el siguiente bucle con formato 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, necesitas agregar el siguiente shortcode dentro de tus entradas de blog para mostrar una lista de entradas con formato micro.

[blogPosts cat=3 excerpt=0 meta=1 meta1=0 num=2]

También podría interesarte verificar si el shortcode ya existe.

Comentarios   Deja una respuesta

  1. Error de análisis: error de sintaxis, se esperaba '<' en C:xampp3htdocsmrcwp-contentthemesmrcmicroLoopPart.php en la línea 6

  2. Hola,

    Realmente me gusta tu código, pero como dijo John, la paginación no funciona. Mostrará el enlace, pero en las siguientes páginas (como la página 2) todavía muestra el contenido de la página uno. ¿Alguna idea?

    Saludos
    Michael

  3. ¡Gracias por esto! – Hacer que el extracto se muestre para las publicaciones consultadas personalizadas en la barra lateral en *single.php* (curiosamente, funcionó en todas las demás páginas) me estaba matando.
    Intenté crear mi propio shortcode pero no pude hacerlo funcionar del todo. Esto fue realmente útil y solucionó el problema...

    No sé si es un error en WP 3.3, pero restablecer consultas, rebobinar, probar tres tipos de consulta diferentes, desde wp_query hasta get_posts, simplemente no funcionó en single.php... solo estaba tratando de crear un bucle fuera del bucle principal, y todos funcionaron en *todas las páginas* excepto en las entradas individuales. ¡Muy frustrante!

    ¡Gracias de nuevo!

  4. Esta es una gran  contribución. Gracias. Sin embargo, tengo un problema con mi tema. Todo parece funcionar excepto cuando agrego la paginación, el enlace está ahí para las páginas y va a esas páginas, pero cada página muestra las últimas entradas (en este ejemplo, las últimas 2). Este es el shortcode que usé. Copié el código de arriba sin cambiarlo.

    [blogPosts
    cat=3 excerpt=0 meta=1 meta1=0 num=2 pnavi=1]
    ¿Alguna idea? Usando WP 3.3.1 

    Gracias

Agrega un comentario

Nos complace que hayas elegido dejar un comentario. Ten en cuenta que todos los comentarios se moderan de acuerdo con nuestra política de privacidad, y todos los enlaces son nofollow. NO uses palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.

Lista de verificación para lanzar WordPress

La lista de verificación definitiva para lanzar WordPress

Hemos recopilado todos los elementos esenciales de la lista de verificación para el lanzamiento de tu próximo sitio web de WordPress en un práctico ebook.
¡Sí, envíame el eBook gratis!