Il file comments.php
gestisce sia l'inserimento che la visualizzazione dei commenti sui vari articoli o post. Questo file è leggermente diverso dagli altri visti in precedenza, in quanto ha una struttura HTML più complessa. Vediamone insieme i dettagli.
Impedire l'accesso diretto al file
Dobbiamo per prima cosa impedire che il file venga caricato direttamente:
<div id="comments">
<?php if(!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME'])) : ?>
<?php die('Questa pagina non può essere caricata direttamente.'); ?>
<?php endif; ?>
<!-- continua -->
</div>
Verificare l'eventuale password richiesta
A volte i post sono protetti da password, quindi occorre verificare che l'utente abbia i privilegi necessari per poter commentare il post:
<!-- continua -->
<?php if(!empty($post->post_password)) : ?>
<?php if($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) : ?>
<?php endif; ?>
<?php endif; ?>
Visualizzare i commenti
Possiamo usare una lista ordinata per marcare i commenti:
<?php if($comments) : ?>
<h3><?php comments_number('Nessun commento', '1 commento', '% commenti'); ?></h3>
<ol>
<?php foreach($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == 'comment') { ?>
<li id="comment-<?php comment_ID(); ?>"> <?php $user_info = get_userdata(1); if ($user_info->ID == $comment->user_id) echo 'authorComment'; ?> <?php if ($comment->user_id > 0) echo 'user-comment'; ?>">
<?php if ($comment->comment_approved == '0') : ?>
<p class="waiting-for-approval">
<em>Il tuo commento è in attesa di moderazione.</em>
</p>
<?php endif; ?>
<div class="comment-text">
<?php comment_text(); ?>
</div>
<div class="comment-meta">
<?php edit_comment_link('Modifica il commento', '', ''); ?>
<?php comment_type(); ?> di <?php comment_author_link(); ?> il <?php comment_date(); ?> alle <?php comment_time(); ?>
<p class="gravatar"><?php if(function_exists('get_avatar')) { echo get_avatar($comment, '36'); } ?></p>
</div>
</li>
<?php } else { $trackback = true; } ?>
<?php endforeach; ?>
</ol>
In questo caso abbiamo visualizzato solo i commenti veri e propri. Possiamo anche visualizzare i trackback al post:
<?php if ($trackback == true) { ?>
<h3>Trackback</h3>
<ol>
<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type != 'comment') { ?>
<li><?php comment_author_link() ?></li>
<?php } ?>
<?php endforeach; ?>
</ol>
<?php } ?>
<?php else : ?>
<p>Nessun commento.</p>
<?php endif; ?>
Visualizzare il form dei commenti
A questo punto dobbiamo visualizzare il form che permetterà agli utenti di commentare il post. Per prima cosa verifichiamo che i commenti siano aperti o meno:
<div id="comments-form">
<?php if(comments_open()) : ?>
<!-- inserisci il contenuto -->
<?php else : ?>
<p>I commenti per questo post sono chiusi.</p>
<?php endif; ?>
</div>
</div> <!-- #comments -->
Quindi dobbiamo verificare se l'utente deve effettuare il login per inserire un commento:
<?php if(get_option('comment_registration') && !$user_ID) : ?>
<p>Devi effettuare il <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>">log in</a> per inserire un commento.</p><?php else : ?>
A questo punto apriamo il form dei commenti:
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
<!-- contenuto del form -->
</form>
Se l'utente ha già effettuato il login, lo informiamo in merito:
<?php if($user_ID) : ?>
<p>Hai effettuato il login come <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>.
<a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout">Esci</a></p>
<?php else : ?>
Infine, visualizziamo i contenuti del form:
<p>Puoi usare i seguenti tag HTML: <?php echo allowed_tags(); ?></p>
<p>
<label for="author"><small>Nome <?php if($req) echo "(obbligatorio)"; ?></small></label>
<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
</p>
<p>
<label for="email"><small>E-mail (non sarà pubblicata) <?php if($req) echo "(obbligatorio)"; ?></small></label>
<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
</p>
<p>
<label for="url"><small>Sito web</small></label>
<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
</p>
<?php endif; ?>
<p>
<label for="comment"><small>Commenta</small></label>
<textarea name="comment" id="comment" cols="100%" rows="10" tabindex="4"></textarea>
</p>
<p>
<input name="submit" type="submit" id="submit" tabindex="5" value="Invia" />
<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
</p>
<?php do_action('comment_form', $post->ID); ?>