L'utilizzo di uno shortcode di WordPress ti consente di pubblicare singoli post del blog in base all'ID, all'ultimo numero di post del blog di una determinata categoria o di tutte le categorie, paginazione opzionale, riepilogo opzionale o contenuto completo e metadati opzionali.
Istruzioni: Aggiungi il seguente codice al file functions.php del tuo tema WordPress per abilitare il nuovo 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' );
?>
Ora, crea un nuovo file di modello chiamato microLoopPart.php nella tua cartella principale e aggiungi il seguente loop formattato in 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>
Infine, devi aggiungere il seguente shortcode all'interno dei tuoi post del blog per visualizzare un elenco di post formattato in micro.
[blogPosts cat=3 excerpt=0 meta=1 meta1=0 num=2]
Potrebbe interessarti anche verificare se lo shortcode esiste già.
Errore di analisi: errore di sintassi, inatteso '<' in C:xampp3htdocsmrcwp-contentthemesmrcmicroLoopPart.php alla riga 6
Ciao,
Apprezzo molto il tuo codice, ma come ha detto John, la paginazione non funziona. Mostrerà il link, ma nelle pagine successive (come la pagina 2) mostra ancora il contenuto della pagina uno. Qualche idea?
Saluti
Michael
Grazie per questo! – Far apparire the_excerpt per i post interrogati personalizzati nella barra laterale su *single.php* (stranamente, ha funzionato su tutte le altre pagine) mi stava facendo impazzire.
Ho provato a creare il mio shortcode ma non sono riuscito a farlo funzionare. Questo è stato davvero utile e ha risolto il problema...
Non so se sia un bug in WP 3.3, ma resettare le query, riavvolgere, provare tre diversi tipi di query – da wp_query a get_posts – semplicemente non ha funzionato su single.php… stavo solo cercando di creare un loop al di fuori del loop principale – e tutti hanno funzionato su *ogni pagina* tranne che sui singoli post. Così frustrante!
grazie ancora!
Questo è un ottimo contributo . Grazie. Ho però un problema con il mio tema. Tutto sembra funzionare tranne quando aggiungo la paginazione, il link c'è per le pagine e va a quelle pagine, ma ogni pagina mostra gli ultimi post (in questo esempio, gli ultimi 2) Questo è lo shortcode che ho usato. Ho copiato il codice sopra senza modifiche
[blogPosts
cat=3 excerpt=0 meta=1 meta1=0 num=2 pnavi=1]
Qualche idea? Uso WP 3.3.1
Grazie