Segnalare un articolo vecchio in modo automatico

Quando si scrive un blog tecnico, penso sia molto utile far presente ai propri lettori che un articolo di un anno fa potrebbe non essere più adeguato alle mutate condizioni: non esistono più i pacchetti, la distribuzione è stata aggiornata pesantemente e quindi i consigli non sono più attuabili, ecc. Mi sono sempre proposto di pensare a come implementare nel blog una segnalazione automatica di “possibile post obsoleto”, visto che ricevo molte visite in post vecchi e probabilmente non più attuabili. L’esigenza stava però nel segnalare il post come obsoleto solo in quei casi in cui l’articolo era di natura tecnica, escludendo così post come gli auguri, le news, le varie, ecc. La soluzione, poi, non doveva stare in un plugin esterno, ma adattando il codice stesso del tema in uso. Mi sono messo quindi a “studiare” PHP e, pur conoscendone alcune basi intuite nelle mie scorribande fra modifiche di temi pronti e creazione di nuovi, ho imparato tante cose che per me sono interessantissime! Non c’è piacere intellettuale più grande per me! E mi capita spesso di addentrarmi in complesse letture informatiche solo per il gusto e il piacere intellettuale che provo. Ad esempio, in questi giorni sto affrontando anche il linguaggio LaTeX: non che abbia esigenza di usarlo, ma solo appunto per il… piacere di farlo! E ritengo una cosa positiva lo studio di una particolare scienza quando essa è scissa dall’esigenza del momento, perché ciò significa essere liberi nell’apprendere, non essendo spinti da niente che non sia il desiderio di sapere.

Tornando in argomento, oggi ho messo mano a questo desiderio di segnalare i post obsoleti ed ecco cosa ho fatto.

Vi presento 4 casi che possono risultare utili in contesti simili fra loro ma con piccole differenze: è istruttivo per le sottigliezze presenti nell’istruzione PHP.

Caso 1. Segnalare un articolo vecchio di un anno

Se vogliamo segnalare semplicemente che un determinato post è vecchio di un anno o più, osservate anzitutto queste righe:

<?php
    // date('U')         = data attuale in secondi dal 1 gennaio 1970 (tempo Unix)
    // get_the_time('U') = data pubblicazione articolo in secondi dal 1 gennaio 1970 (tempo Unix)
    // 31557600          = secondi in un anno (365 giorni e 6 ore)
    if ((date('U') - get_the_time('U')) >= 31557600) { ?>
        <div class="avviso">
        Attenzione! Questo è un articolo di almeno un anno fa!<br /> 
        Le istruzioni contenute potrebbero non essere più adeguate!
        </div>
<?php } ?>

La prima riga, come sapete, apre la funzione PHP. Le righe 2, 3 e 4 sono dei commenti. La riga 5 è quella che ci interessa da vicino. Essa dalla data attuale in secondi dal 1° gennaio 1970 (il tempo Unix) sottrae la data di pubblicazione del post (sempre in tempo Unix); se il risultato è maggiore o uguale a 31.557.600 (i secondi in un anno di 365 giorni e 6 ore), verranno renderizzate le 3 righe successive (6, 7 e 8 ) contenenti l’avviso, altrimenti si passerà oltre. La riga 10 chiude la funzione.

Al tag DIV è assegnata la classe “avviso”: ovviamente potete scegliere una classe già presente nel vostro file .css o crearne una ad-hoc.

Caso 2. Segnalare un articolo vecchio di un anno e contemporaneamente appartenente a una categoria precisa

In questo caso, che è quello che mi interessa più da vicino, le condizioni perché venga visualizzato il messaggio di “post obsoleto” sono due: l’articolo deve avere almeno un anno e deve appartenere a una determinata categoria. Infatti non vogliamo che venga visualizzato il messaggio nel post di auguri di Natale di due anni fa! Ecco il codice:

<?php
    // date('U')         = data attuale in secondi dal 1 gennaio 1970 (tempo Unix)
    // get_the_time('U') = data pubblicazione articolo in secondi dal 1 gennaio 1970 (tempo Unix)
    // 31557600          = secondi in un anno
    if ((date('U') - get_the_time('U')) >= 31557600 && in_category('4')) { ?>
        <div class="avviso">
        Attenzione! Questo è un articolo tecnico di almeno un anno fa!<br /> 
        Le istruzioni contenute potrebbero non essere più adeguate!
        </div>
<?php } ?>

La differenza sta nell’istruzione && in_category('4') che viene associata a quella del conteggio dei secondi. Va ovviamente personalizzato il numero della categoria dell’articolo.

Caso 3. Segnalare un articolo vecchio di un anno e contemporaneamente appartenente a una categoria e/o ad altre

Siamo nello stesso esempio del caso 2, con la differenza che l’articolo deve appartenere a una categoria o a un’altra (poniamo il caso di avere più categorie tecniche).

<?php
    // date('U')         = data attuale in secondi secondo lo standard Unix
    // get_the_time('U') = data pubblicazione articolo
    // 31557600          = secondi in un anno
    if ((date('U') - get_the_time('U')) >= 31557600 && (in_category('4') or in_category('26'))) { ?>
        <div class="avviso">
        Attenzione! Questo è un articolo tecnico di almeno un anno fa!<br /> 
        Le istruzioni contenute potrebbero non essere più adeguate!
        </div>
<?php } ?>

Da notare che le due funzioni in_category sono state racchiuse tra parentesi per tenerle assieme: (in_category('4') or in_category('26')).

Si possono aggiungere altre categorie aggiungendo altri or dopo ('26').

Caso 4. Segnalare un articolo vecchio di un anno e anche appartenente a una categoria, oppure di qualunque data ma a una precisa categoria

Voglio riportare un ultimo caso ma solo per scopi istruttivi, visto che la stessa cosa si può raggiungere anche con un bell’elseif. Se eliminiamo due parentesi come nel caso seguente (quella prima di in_category e l’ultima tonda), otterremo un risultato ancora diverso. Ecco il codice:

<?php
    // date('U')         = data attuale in secondi secondo lo standard Unix
    // get_the_time('U') = data pubblicazione articolo
    // 31557600          = secondi in un anno
    if ((date('U') - get_the_time('U')) >= 31557600 && in_category('4') or in_category('26')) { ?>
        <div class="avviso">
        Attenzione! Questo è un articolo tecnico di almeno un anno fa!<br /> 
        Le istruzioni contenute potrebbero non essere più adeguate!
        </div>
<?php } ?>

Infatti così avremo la segnalazione di post obsoleto

  • negli articoli che hanno almeno un anno e che sono nella categoria 4
  • e negli articoli che sono nella categoria 26 a prescindere dalla loro data.

Siate comprensivi se le funzioni potevano essere rese in modo più elegante, ma sto imparando! :-)

Photo credits: Lance and Erin, The News of the World, 1848, CC by-nc-sa, .