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

Può rivelarsi utile per chi cerca qualcosa nel nostro blog sapere quanti articoli sono stati trovati in un determinato archivio.

Questo è un post tecnico di 6 anni fa. Le istruzioni potrebbero non essere più valide.

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:

function get_archive_count() {
	// Ci servono queste due variabili globali
	global $wp_query, $paged;

	// Preleviamo il numero di post trovati
	$arc_count = $wp_query->found_posts;

	// Se ci sono più pagine
	if ( $arc_count > get_option( 'posts_per_page' ) ) {
		// Se siamo sulla prima pagina impostiamo il valore a 1
		if( $paged == 0 ) $paged = 1; // La prima pagina di una serie ha valore 0;
		// Stampiamo la riga con il numero di pagine
		$output = sprintf( __( '%1$s posts — page %2$s of %3$s', 'my-plugin' ), $arc_count, $paged, $wp_query->max_num_pages );
	// Altrimenti, se c'è una sola pagina
	} else {
		// Stampiamo la riga senza il numero di pagine
		$output = sprintf( _n( '%s post', '%s posts', $arc_count, 'my-plugin'), number_format_i18n( $arc_count ) );
	}

	// Restituiamo l'output
	return $output;
}

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.

Autore: Aldo Latino

Aldo Latino usa con entusiasmo Linux nella distribuzione Ubuntu, è un appassionato di WordPress e si diletta a fare il blogger. Ha anche una lista dei desideri. Per altre informazioni visita la sua .

7 pensieri riguardo “Visualizzare il numero di post trovati in un archivio o una ricerca”

    1. La differenza fra quanto scritto nell’articolo che citi e il mio post è che quantomeno il risultato è visibile anche negli archivi di categorie e tag.

      Non saprei se esiste un plugin che faccia la stessa cosa.

  1. Ciao e complimenti per l’articolo.

    Mi potresti dire, per favore, qual è il file in cui incollare la chiamata? echo get_archive_count()

    Grazie.

      1. Grazie anzitutto per la risposta.

        Ma sai che non ci riesco? (sono un miubbo, scusa, e sbaglio sicuramente qualcosa).
        Ho incollato la funzione nel file functions.php del tema (Twenty Eleven), alla fine del testo.

        Quindi, sempre dall’editor, ho incollato la chiamata nel file tag.php, ma sicuramente nel posto sbagliato, perché quando nel template compare qualcosa è giusto, testualmente, <>

        Grazie in anticipo.

        1. Inserisci la funzione get_archive_count() subito prima del tag </header> e cioè:

          <?php if( function_exists( 'aldolat_archive_count' ) ) aldolat_archive_count(); ?>

          </header>

I commenti sono chiusi