L'utilisation d'un shortcode WordPress vous permet de publier des articles de blog individuels par ID, le dernier nombre d'articles d'une certaine catégorie ou de toutes les catégories, la pagination facultative, l'extrait facultatif ou le contenu complet affiché et les métadonnées facultatives.
Instructions : Ajoutez le code suivant au fichier functions.php de votre thème WordPress pour activer le nouveau 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' );
?>
Créez maintenant un nouveau fichier de modèle appelé microLoopPart.php dans votre dossier racine et ajoutez la boucle micro formatée suivante.
<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>
Enfin, vous devez ajouter le shortcode suivant dans vos articles de blog pour afficher une liste d'articles au format micro.
[blogPosts cat=3 excerpt=0 meta=1 meta1=0 num=2]
Vous pourriez également aimer vérifier si le shortcode existe déjà.
Erreur d'analyse : erreur de syntaxe, '<' inattendu dans C:xampp3htdocsmrcwp-contentthemesmrcmicroLoopPart.php à la ligne 6
Salut,
J'aime vraiment votre code, mais comme John l'a dit, la pagination ne fonctionne pas. Elle affiche le lien, mais sur les pages suivantes (comme la page 2), elle affiche toujours le contenu de la page un. Une idée ?
Cordialement
Michael
Merci pour ça ! – Faire apparaître l'extrait pour les articles personnalisés dans la barre latérale sur *single.php* (étrangement, cela fonctionnait sur toutes les autres pages) me rendait fou.
J'ai essayé de créer mon propre shortcode mais je n'arrivais pas à le faire fonctionner. Ceci était vraiment utile et a résolu le problème…
Je ne sais pas si c'est un bug dans WP 3.3, mais réinitialiser les requêtes, revenir en arrière, essayer trois types de requêtes différents – de wp_query à get_posts – n'a tout simplement pas fonctionné sur single.php… j'essayais juste de créer une boucle en dehors de la boucle principale – et elles fonctionnaient toutes sur *chaque page* sauf sur les articles uniques. Tellement frustrant !
merci encore !
C'est une excellente contribution. Merci. J'ai cependant un problème avec mon thème. Tout semble fonctionner sauf quand j'ajoute la pagination, le lien est là pour les pages et il va sur ces pages, mais chaque page affiche les derniers articles (dans cet exemple, les 2 derniers). C'est le shortcode que j'ai utilisé. J'ai copié le code ci-dessus sans le modifier
[blogPosts
cat=3 excerpt=0 meta=1 meta1=0 num=2 pnavi=1]
Des idées ? Utilisation de WP 3.3.1
Merci