Visualizzare il numero di post trovati in un archivio o una ricerca

Restando ancora in tema di variabili di WordPress relative alle pagine, vorrei spendere una parola su una funzionalità che mi piace quando navigo in un archivio, quella cioè di sapere quanti post sono stati trovati se consulto l’archivio di un tag o di una categoria o se effettuo una ricerca. Questa funzionalità è implementata da tempo, ovviamente, in questo blog: ad esempio la trovate se cercate “Linux” o se visitate questa pagina d’archivio. Mi sembra, tra l’altro, un piccolo servizio in più per chi visita il nostro blog.

Implementare questa funzionalità è semplice e basta incollare poche righe nel proprio plugin contenente tutte le funzioni personalizzate o, al limite, nel file functions.php del proprio tema. Evitate, però, di usare questo file, perché esso serve per quelle caratteristiche proprie del tema: se lo cambiate, perdete le funzioni che vorreste avere anche nel nuovo.

La funzione

La funzione che ci serve consta di pochissime righe:

 1function get_archive_count() {
 2    // Ci servono queste due variabili globali
 3    global $wp_query, $paged;
 4
 5    // Preleviamo il numero di post trovati
 6    $arc_count = $wp_query->found_posts;
 7
 8    // Se ci sono più pagine
 9    if ( $arc_count > get_option( 'posts_per_page' ) ) {
10        // Se siamo sulla prima pagina impostiamo il valore a 1
11        if( $paged == 0 ) $paged = 1; // La prima pagina di una serie ha valore 0;
12        // Stampiamo la riga con il numero di pagine
13        $output = sprintf( __( '%1$s posts — page %2$s of %3$s', 'my-plugin' ), $arc_count, $paged, $wp_query->max_num_pages );
14    // Altrimenti, se c'è una sola pagina
15    } else {
16        // Stampiamo la riga senza il numero di pagine
17        $output = sprintf( _n( '%s post', '%s posts', $arc_count, 'my-plugin'), number_format_i18n( $arc_count ) );
18    }
19
20    // Restituiamo l'output
21    return $output;
22}

Per usarla è sufficiente che nel punto preferito del proprio tema si incolli questa chiamata:

echo get_archive_count();

o magari anche:

echo '<p>' . get_archive_count() . '</p>';

La logica di funzionamento è la seguente: se ci troviamo con più pagine da mostrare, l’output della funzione dovrà visualizzare sia il numero di post trovati che il numero di pagina che stiamo vedendo; altrimenti mostrerà solo il numero dei post. In altre parole, se abbiamo più pagine, vogliamo vedere qualcosa del genere: “58 articoli — Pagina 3 di 6”; altrimenti basta solo “8 articoli”, nel caso di pochi post.

Il codice mi sembra commentato a sufficienza. Eventualmente, ne parliamo nei commenti.

Photo courtesy: dolescum, Archives’ stacks, CC by-nc-sa.