Wordpress: creare un file comments di un template

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); ?>


Torna su