Visualizzare il numero di pagina nell’elemento title

Qualche giorno fa un utente del mio forum mi ha chiesto di aiutarlo a inserire nell’elemento title della pagina, qualora il post di WordPress o la pagina “statica” fosse suddivisa su più pagine, il numero di pagina attualmente visualizzata: in altre parole, avere un titolo di questo tipo “Titolo della pagina — Pagina 7”. Mentre era riuscito a farlo con le pagine di archivio, non aveva avuto altrettanto successo con quelle dei post (e, aggiungo io, con quelle delle pagine statiche).

Il motivo è semplice: la variabile $paged, che contiene il numero di pagina attualmente visualizzata, è attiva nella home e nell’archivio, cioè data, autore, categoria, tag; per i post e le pagine che si estendono su più pagine bisogna usarne un’altra: la semplice $page.

La richiesta del lettore è stata molto istruttiva per me e il merito di questo post, dunque, va dato a lui, che ringrazio per avermi spinto ad analizzare questa faccenda e a farmi entrare nei meandri di /wp-includes/post-template.php. Ho anche approfittato dell’occasione per implementare questa soluzione in Ubuntu block notes, che in questo articolo vi mostro.

Inserire il numero di pagina attuale nell’elemento title

Di solito nel file header.php troviamo che il tag title è generato da una riga simile:

<title>
  <?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?>
</title>

che ci restituisce:

<title>Titolo del post < Titolo del blog</title>

o, se siamo in un archivio di categoria, sarà:

<title>Nome categoria < Titolo del blog</title>

Questa soluzione, però, può essere migliorata dando al lettore altre informazioni più chiare e dettagliate. Credo che anche dal punto di vista SEO si abbiano miglioramenti, ma non ho verificato.

Nel mio header.php la semplice riga è stata sostituita con le seguenti, che differenziano il titolo ogni volta che si accede a un determinato tipo di pagina: articolo, pagina statica, archivio. Ecco le righe:

<title>
 <?php
  /**
   * Prepara il titolo della pagina a seconda del tipo
   * Stampa anche il numero di pagina a partire dalla seconda
   *
   * $paged contiene l'attuale numero di pagina nella home e nell'archivio
   * $page  contiene l'attuale numero di pagina di un articolo multipagine o di una pagina multipagine
   *
   */
  if (is_home()) {
    echo 'Home';
    // Si può usare `if (is_paged())` oppure `if ($paged)` oppure `if ($paged > 1)`
    // Nella prima pagina di una serie, $paged è sempre 0
    if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_category()) {
    echo 'Archivio della categoria &laquo;'.single_cat_title('', false).'&raquo;';
    if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_tag()) {
    echo 'Archivio del tag &laquo;'.single_tag_title('', false).'&raquo;';
    if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_day()) {
    echo 'Archivio del '.get_the_time('j F Y');
    if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_month()) {
    echo 'Archivio di '.get_the_time('F Y');
    if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_year()) {
    echo 'Archivio per l\'anno '.get_the_time('Y');
    if ($paged) { echo ' | Pagina '.$paged; }
  } elseif (is_author()) {
    $author = $wp_query->get_queried_object();
    echo 'Archivio di '.$author->display_name;
  if ($paged) { echo ' | Pagina '.$paged; }
    } elseif (is_search()) {
    echo 'Risultati della ricerca di &laquo;'.wp_specialchars($s).'&raquo;';
  if ($paged) { echo ' | Pagina '.$paged; }
    } elseif (is_404()) {
    echo 'Errore 404: Non trovato';
  } elseif (is_single() || is_page()) {
    wp_title('');
    // qui non si può usare $paged: si usa $page al suo posto
    if ($page) { echo ' | Pagina '.$page; }
  }
  echo ' &lsaquo; '.get_bloginfo('name');
 ?>
</title>

Ci sono dei commenti nel codice: penso siano chiari.

Provate, ora, a dare un’occhiata al titolo pagina della pagina 2 del blog: mentre nella 1 (la homepage) il numero non viene stampato, lo vediamo dalla 2 in poi; così anche date un’occhiata alla categoria WordPress, al tag Guide del blog, a un archivio basato su anno o su ricerca.

Date ora uno sguardo a un post suddiviso su più pagine: il title presenta solo il titolo dell’articolo più il nome del blog, mentre nella pagina 2 vediamo scritto anche il numero.

Specificare anche il numero totale di pagine

E se volessimo aggiungere anche il numero complessivo delle pagine, nella forma: “Pagina 3 di 10”?

Anche in questo caso dovremmo distinguere se si tratta di Home/Archivio e di Post/Pagina. Nel primo caso useremmo:

if ($paged) { echo ' | Pagina '.$paged.' di '.$wp_query->max_num_pages; }

mentre nel secondo dobbiamo agire diversamente perché non abbiamo una variabile diretta fuori dal loop:

global $page;
$pages = count( explode( '<!--nextpage-->', $wp_query->post->post_content ) );
if ($page) { echo ' | Pagina '.$page.' di '.$pages; }

Usare queste forme in altre parti del tema

Chiaramente questa soluzione può essere usata altrove. Io l’ho fatto nel template single.php nel caso il post sia suddiviso su più pagine: a lato del testo appare la dicitura che restituisce le informazioni. L’ho usata anche nelle ricerche che si estendono su più pagine e anche nelle pagine d’archivio: penso sia un servizio in più che si fornisce al lettore.

Mi fermo qui, con la promessa di scrivere qualcosa di più dettagliato su questo argomento e anche su come ho agito per personalizzare il mio archivio e le informazioni che ne escono.

aldolat

Il blocco note di Aldo.


Come differenziare tra loro le pagine di un blog su Wordpress, specificando il numero di pagina nell'elemento title di ciascuna di esse. Con un pizzico di attenzione si ottengono risultati estremamente interessanti.