10 singoli post e pagine
In ogni tema che si rispetti non possono mancare i template files single.php per i singoli post e page.php per le pagine.
single.php è una versione semplificata di index.php, senza tutto quello che riguarda il fallback e con get_template_part( ‘content’, ‘single’ ) invece dell’approccio get_post_format().
Ecco single.php
<?php get_header(); ?>
<div id="main-container">
<section id="content-container">
<?php
// loop
while ( have_posts()) : the_post();
//carica file del loop
get_template_part('content','single');
// carica commenti se ce n'è uno solo
comments_template('',true );
// fine loop
endwhile;
?>
</section> <!-- #main-container ends -->
<?php get_sidebar(); ?>
</div>
<?php get_footer(); ?>
single.php cercherà dapprima di caricare content-single.php; qualora non ci riuscisse, caricherà content.php
Creiamo il file content-single.php che sia basato sul content.php originale ma senza il link del titolo, usando h1 invece di h2 e senza controllare se si tratta di un singolo post o di una pagina, in quanto lo sappiamo già:
<article id="post-<?php the_ID(); ?>">
<?php post_class(); ?>
<header>
<h1 class="entry-title">
<?php the_title(); ?>
</h1>
<p class="entry-meta">
Postato il
<time datetime="<?php echo get_the_date(); ?>">
<?php the_time(); ?>
</time>
by <?php the_author_link(); ?>
<?php
// i commenti sono aperti?
if (comments_open()) : ?>
•
<?php comments_popup_link('Nessun commento', '1 solo comment', '% commenti');
endif;
// Mostra le cat e i tag sui post singoli
if (is_singular('post')) :
?>
<br/>Archiviato in <?php get_the_category(',');
the_tags(' e taggato con', ',', ''); ?>
</p>
<?php endif;
endif;
?>
</header>
</article>
Per page.php, noterete che è molto simile. In effetti vi basterebbe semplicemente copiare il contenuto da single.php e incollarlo in page.php. Se voleste un look and feel diverso per le vostre pagine, probabilmente dovreste creare un file content-page.php e utilizzare get_template_part( ‘content’, ‘page’ );.
In content-single.php, si racchiudete la parte meta in un tag condizionale, is_single(), che restituisce true solo quando visualizzate un post singolo di un certo tipo. Questo include gli allegati ma non le pagine. Ecco il file content-single.php aggiornato:
<article id="post-<?php the_ID(); ?>">
<?php post_class(); ?>
<header>
<h1 class="entry-title">
<?php the_title(); ?>
</h1>
<?php if (is_single()) : ?>
<p class="entry-meta">
Postato il
<time datetime="<?php echo get_the_date(); ?>">
<?php the_time(); ?>
</time>
by <?php the_author_link(); ?>
<?php
// i commenti sono aperti?
if (comments_open()) : ?>
•
<?php comments_popup_link('Nessun commento', '1 solo comment', '% commenti');
endif;
// Mostra le categorie e i tag sui post singoli
if ( is_singular('post') ) :
?>
<br/>Archiviato in <?php the_category(',');
the_tags(' e taggato con', ',', ''); ?>
</p>
<?php endif;
endif;
?>
</header>
<?php // Il contenuto
the_content(); ?>
</article>
arriviamo ora al file comments.php per caratterizzare i commenti.
<div id="comments">
<?php
// Il post è protetto da password?
if ( post_password_required() ) : ?>
<p class="nopassword">
Questo post è protetto da password. Digitate la vostra password.
</p>
</div>
<?php
// Torna indietro
return;
endif;
// Cerca i commenti
if ( have_comments() ) : ?>
<h2 id="comments-title">
Ci sono<?php comments_number( 'zero commenti', '1 commento', '% commenti' ); ?>
</h2>
<?php
// Navigazione tra i commenti
if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : ?>
<nav id="comments-nav-above">
<div class="nav-previous">
<?php previous_comments_link( '← Vecchi commenti' ); ?>
</div>
<div class="nav-next">
<?php next_comments_link( 'Prossimi comenti →' ); ?>
</div>
</nav>
<?php endif; ?>
<ol class="commentlist">
<?php // Elenco commenti
wp_list_comments();
?>
</ol>
<?php
// Navigazione tra i commenti
if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : ?>
<nav id="comments-nav-above">
<div class="nav-previous">
<?php previous_comments_link( '← Vecchi commenti' ); ?>
</div>
<div class="nav-next">
<?php next_comments_link( 'Prossimi comenti →' ); ?>
</div>
</nav>
<?php endif;
// finito
endif; ?>
<?php // Esce dal form del commento
comment_form();
?>
</div>
La parte più significativa è wp_list_comments() che genera i commenti veri e propri. Può impiegare alcuni parametri e, qualora vi servisse, vi permette anche di perfezionare l’output usando il parametro di callback per puntare a una funzione in functions.php.