UPDATE: ho aggiunto i controlli sulla validità della data di nascita
Spesso vedo nelle pagine about che inseriamo o la nostra età o la data di nascita. (inclusa la mia pagina)
Il problema è che non le aggiorniamo mai, per quanto riguarda l’età.
Ho quindi creato un metodo per il mio plugin di utility per far si che esca tutto in automatico.
Vi spiegherò anche come convertilo in funzione procedurale per inserirla nel vostro file functions.php
La versione minima di PHP perché funzioni è la 5.3
Questo è il metodo completo.
public function calculate_age( $atts ) { // Attributes $atts = shortcode_atts( array( 'born_date' => 'null', ), $atts, 'age' ); if ( 10 == strlen( $atts['born_date'] ) ){ if ( preg_match( "/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $atts['born_date'] ) ) { //now date $now = new DateTime( date( 'Y-m-d', time() ) ); //birthday date $bd = new DateTime( $atts['born_date'] ); //difference $difference = $now->diff( $bd ); //Create the stings for strtotime to localize day and month name $born_date = explode( '-', $atts['born_date'] ); $born_date = $born_date['1'] . '/' . $born_date['2'] . '/' . $born_date['0']; //set the right locale to have day and month name in the right language setlocale( LC_TIME, get_locale() ); $born_date = utf8_encode( strftime( "%A %d %B %Y", strtotime( $born_date ) ) ); $my_age = ' sono nato ' . $born_date . ' ho ' . $difference->y . ' anni ' . $difference->m . ' mesi e ' . $difference->d . ' giorni e cammino su questa terra da ' . $difference->days . ' giorni'; } else { $my_age = __( 'Date Format ERROR', 'wolly' ); } } else { $my_age = __( 'Date Format ERROR', 'wolly' ); } return $my_age; }
Nel magic method
__construct
andiamo a dichiarare lo shortcode
add_shortcode( 'age', array( $this, 'calculate_age' ) );
Ora basta inserire nella pagina, o nell’articolo, nella posizione dove vogliamo che appaia la nostra età, questo shortcode (ricordatevi di inserirlo in [parentesi quadre])
age born_date="1966-12-27"
age è il nome dello shortcode e born_date è la vostra data di nascita in formato aaaa-mm-gg
Il risultato, nel mio caso, è: sono nato martedì 27 dicembre 1966 ho 54 anni 0 mesi e 20 giorni e cammino su questa terra da 19744 giorni e ho 648 mesi
Potete vederlo in funzione anche nella mia pagina perché Wolly.
Se volete inserirlo nel functions.php del vostro tema, invece che in una classe di un vostro plugin, il codice è quello che segue:
function wolly_calculate_age( $atts ) { // Attributes $atts = shortcode_atts( array( 'born_date' => 'null', ), $atts, 'age' ); if ( 10 == strlen( $atts['born_date'] ) ){ if ( preg_match( "/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $atts['born_date'] ) ) { //now date $now = new DateTime( date( 'Y-m-d', time() ) ); //birthday date $bd = new DateTime( $atts['born_date'] ); //difference $difference = $now->diff( $bd ); //Create the stings for strtotime to localize day and month name $born_date = explode( '-', $atts['born_date'] ); $born_date = $born_date['1'] . '/' . $born_date['2'] . '/' . $born_date['0']; //set the right locale to have day and month name in the right language setlocale( LC_TIME, get_locale() ); $born_date = utf8_encode( strftime( "%A %d %B %Y", strtotime( $born_date ) ) ); $my_age = ' sono nato ' . $born_date . ' ho ' . $difference->y . ' anni ' . $difference->m . ' mesi e ' . $difference->d . ' giorni e cammino su questa terra da ' . $difference->days . ' giorni'; } else { $my_age = __( 'Date Format ERROR', 'wolly' ); } } else { $my_age = __( 'Date Format ERROR', 'wolly' ); } return $my_age; } add_shortcode( 'age', 'wolly_calculate_age' );
Fate attenzione perché NON ho implementato controlli, almeno per ora, sulla validità del formato della data che andate a inserire nello shortcode, quindi se non mettete il formato corretto potete incorrere in output inaspettati.
Ricapitolando.
Creiamo uno shortcode
Utilizziamo datetime
Impostiamo il locale riprendendolo dalle impostazioni della nostra installazione WordPress.
Se avete dubbi, domande o se volete migliorare questo codice, i commenti sono per voi.
[…] adattarla. Quindi hai tre opzioni: evita questo dato, aggiornalo ogni anno, usa lo shortcode di paolovalenti.info: in questo contenuto, infatti, trovi le istruzioni per modificare in automatico questo […]