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()) : ?>
                &bull;
                <?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()) : ?>
                &bull;
                <?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( '&larr; Vecchi commenti' ); ?>
            </div>
            <div class="nav-next">
            <?php next_comments_link( 'Prossimi comenti &rarr;' ); ?>
            </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( '&larr; Vecchi commenti' ); ?>
        </div>
        <div class="nav-next">
         <?php next_comments_link( 'Prossimi comenti &rarr;' ); ?>
        </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.