Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 11 di 33
  • livello avanzato
Indice lezioni

Il file index.php nei temi di WordPress

Analizziamo il ruolo del file index.php nei temi di WordPress, è il template principale di un tema e permette di generare qualsiasi tipo di pagina ma consente di lavorare con altri template file per generare il codice di specifiche parti come intestazioni, piè di pagina, sidebar e commenti.
Analizziamo il ruolo del file index.php nei temi di WordPress, è il template principale di un tema e permette di generare qualsiasi tipo di pagina ma consente di lavorare con altri template file per generare il codice di specifiche parti come intestazioni, piè di pagina, sidebar e commenti.
Link copiato negli appunti

Il file index.php è il template principale (e l'unico indispensabile) di ogni tema di WordPress. La struttura del file deve essere tale da generare ogni tipo di pagina, sia che si tratti del blog, che degli archivi di notizie, delle pagine statiche o anche degli attachment. Si tratta di uno script composto da frammenti di codice HTML e istruzioni PHP, per gran parte semplificate dalle funzioni del framework.

La struttura della pagina

Lo scopo del file index.php è quello di generare dinamicamente il mark-up delle pagine. In un tema estremamente semplice, si può affidare questo compito al solo index.php; in un tema più complesso sarà necessario creare template ad-hoc. Alcuni di questi generano la struttura generale della pagina (blog, archivio, pagina singola, ecc.), altri, invece, generano il codice di specifiche parti.

Così i template header.php, sidebar.php e footer.php, saranno inclusi nel file index.php, e produrranno rispettivamente il mark-up dell'intestazione, della sidebar e del fondo della pagina. Si supponga, quindi, che la struttura della pagina sia così articolata:

<!-- File index.php -->
<!-- File header.php -->
<!doctype html>
<html class="no-js" lang="it-IT">
<head>...</head>
<body class="home blog">
	<div id="page" class="site">
		<header id="site-header">
			<h1 class="site-title">...</h1>
			<nav id="primary-navigation">...</nav>
		</header>
<!-- Fine file header.php -->
		<div id="main-content" class="main-content">
			<div id="content" class="content-area" role="main">
<!-- Template specifico -->
				<article>...<article>
<!-- Fine template specifico -->
			</div>
		</div>
<!-- File sidebar.php -->
		<aside id="sidebar">...</aside>
<!-- Fine file sidebar.php -->
<!-- File footer.php -->
		<footer id="site-footer">...</footer>
	</div><!-- #page -->
</body>
</html>
<!-- Fine file footer.php -->
<!-- Fine file index.php -->

I commenti evidenziano le parti della pagina delegate ai template specifici.

L'intestazione del file index.php

Anche se non è indispensabile, spesso il codice PHP del file index viene preceduto da meta-dati che forniscono alcune informazioni generali sul template, come il nome del CMS, il nome e la versione del tema:

/**
 * @package WordPress
 * @subpackage Seventy-One-WordPress-Theme
 * @since Seventy One 1.0
 */

Lo script del file index.php

Subito dopo aver incluso l'header, il file index.php provvede a generare la parte principale della pagina, dove vengono visualizzati i contenuti archiviati nella tabella wp_posts del database. In questa parte del documento, oltre ai contenuti, vengono spesso inserite le categorie e le tassonomie associate agli articoli (tag e custom taxonomies). Quello che segue è lo script completo del file index.php del tema "Seventyone":

<?php get_header(); ?>
<div id="main-content" class="main-content">
	<div id="content" class="content-area" role="main">
	<?php
	if (have_posts()) :
		// Start the Loop.
		while (have_posts()) : the_post();
			/*
			 * Include the post format-specific template for the content. If you want to
			 * use this in a child theme, then include a file called called content-___.php
			 * (where ___ is the post format) and that will be used instead.
			 * from Twenty Fourteen
			 */
			get_template_part( 'content', get_post_format() );
			if( is_single() ) :
				comments_template();
			endif;
		endwhile;
	?>
	<?php post_navigation(); ?>
	<?php
	else :
		// If no content, include the "No posts found" template.
		// from Twenty Fourteen
		get_template_part( 'content', 'none' );
	endif;
	?>
	</div><!-- #content -->
</div><!-- #main-content -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

L'intestazione del file e la testata del documento

La prima istruzione del file include il template header.php. Invece delle consuete funzioni include() e require(), è consigliato utilizzare una funzione propria del framework di WordPress: get_header():

<?php get_header(); ?>

Il file header.php genera i tag di apertura del documento, <doctype> e <html>, il tag di apertura <head> e tutti i meta tag; incorpora gli script e i fogli di stile e, infine, genera la parte superiore della pagina, ossia header e menu di navigazione. Tale file header.php sarà analizzato dettagliatamente nel prossimo capitolo.

Il contenuto delle pagine

Il contenuto viene racchiuso nelle due div, #main-content e #content. Il blocco condizionale verifica l'esistenza di post che corrispondono alla richiesta dell'utente e, in caso positivo, avvia un ciclo iterativo, definito Loop, che recupera dal database gli articoli.

Le istruzioni interne al Loop dovranno generare l'output HTML. Queste istruzioni possono essere inserite direttamente nel file index.php, oppure inserite in template specifici, incorporati nel file dalla funzione get_template_part. Nel tema Seventyone è stato previsto di creare un template specifico per ogni formato di post.

Un template per ogni formato di post

get_template_part incorpora quindi un template individuato dai due argomenti accettati dalla funzione:

get_template_part( $slug, $name );

Argomento Descrizione
$slug (string) E' il nome generico del template (content nel codice visto sopra).
$name (string) E' il nome del template specifico, che nel codice riportato sopra è determinato dalla funzione get_post_format(), che restituisce il formato del post corrente.

Per quanto detto, sarà necessario creare un template generico e tanti template specifici per quanti sono i formati di post supportati dal tema. Pertanto bisognerà creare i seguenti file:

  • content.php
  • content-aside.php
  • content-audio.php
  • content-gallery.php
  • content-image.php
  • content-link.php
  • content-none.php
  • content-quote.php
  • content-video.php

Oltre al template generico content.php e ai template specifici per ogni formato, è stato previsto il template content-none.php, che sarà incorporato nel file index.php nel caso in cui non siano presenti articoli corrispondenti alla richiesta dell'utente. Quello che segue è il codice del file content.php del tema Seventyone:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
	<header class="entry-header">
		<?php
		if ( is_single() ) :
			the_title( '<h1 class="entry-title">', '</h1>' );
		else :
			the_title( '<h1 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h1>' );
		endif;
		?>
		<?php posted_on(); ?>
		<?php edit_post_link( __( 'Edit', 'seventyone' ), '<span class="edit-link">', '</span>' ); ?>
	</header>
	<?php if ( is_search() || is_home() ) : ?>
	<div class="entry-summary">
		<?php
			if ( has_post_thumbnail() ){
				?>
				<div class="post-thumbnail"><?php the_post_thumbnail( 'thumbnail' ); ?></div>
				<?php
			}
		?>
		<?php the_excerpt(); ?>
	</div><!-- .entry-summary -->
	<?php else : ?>
	<div class="entry-content">
		<?php the_content(); ?>
	</div>
	<footer class="entry-meta">
		<?php the_tags(__('Tags: ','seventyone'), ', ', '<br />'); ?>
		<?php _e('Posted in','seventyone'); ?> <?php the_category(', ') ?> |
		<?php
		if ( comments_open() ) :
		  comments_popup_link(__('No Comments &#187;','seventyone'), __('1 Comment &#187;','seventyone'), __('% Comments &#187;','seventyone'));
		endif;
		?>
	</footer>
	<?php endif; ?>
</article>

Tag, attributi e contenuti vengono generati dinamicamente, grazie ai template tags. Per sintetizzare l'analisi, lo stesso codice sarà inserito in tutti i template content-{postformat}.php.

Il discorso sul file index.php è ampio e sarà esaurito nel proseguio della guida, quando esamineremo la prima versione del tema "Seventyone".


Ti consigliamo anche