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 »','seventyone'), __('1 Comment »','seventyone'), __('% Comments »','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".