In questo articolo raccogliamo tutte le FAQ ordinate e raggruppate per categoria.
bash
Rinominare un gruppo di file in base ad una regexpr
file1_tmp.sh
file2_tmp.sh
...
file99_tmp.sh
e supponiamo di voler togliere la parte centrale ‘_tmp’ in tutti i file. Possiamo utilizzare il comando “rename” o “prename”:
rename 's/_tmp//' *.sh
Vedi tutte le FAQsRedirigere lo standard error sullo standart output
Per redirigere lo standard error di un comando in shell basta utilizzare la seguente sinstassi seguente:
ls file_non_esistente 2>&1 | grep File
oppure ancor meglio per non avere sul terminale lo standard error basta buttarlo in /dev/null
ls file_non_esistente 2>/dev/null
Gli identificativi standard o canali standard (o standard streams) aperti automaticamente sono:
- 0 standard input
- 1 standard output
- 2 standard error
Vedi tutte le FAQs
Uso di array semplici in bash
Con Bash per dichiarare esplicitamente un array bisogna utilizzare
declare -A mioarray
Per avere il valore dell’elemento 5 basta scrivere
echo $[mioarray[5]
mentre per cambiare il valore bisogna scrivere
mioarray[5]='nuovo valore'
${mioarray[*]} o ${mioarray[@]} viene espanso da tutti i valori dell’array mentre $[#mionome[@]} viene espanso con la lunghezza dell’array
Cosa possiamo fare con gli array? Ad esempio memorizzare l’output di un comando di cui ogni riga vorremmo che vada su un elemento differente.
IFS=$'\n' mioarray=($(ls -alh))
A questo punto possiamo stampare l’output come
IFS=$'\n' echo "${mioarray[*]}"
Attenzione: i doppi apici sono importanti per non avere l’output su un’unica riga.
Facendo così potremmo fare diversi test sullo stesso output catturato una sola volta.
Vedi tutte le FAQs
Uso di array associativi in bash
Per dichiarare un array associativo bisogna dichiararlo con
declare -A mioarray/
e come indice si può utilizzare una stringa, questo significa che
mioarray[test]='aa'
echo ${mioarray[test]} # restituisce 'aa'
Vedi tutte le FAQs
Convertire da Bash un numero decimale in binario
Supponiamo di star lavorando su uno script bash e che per qualche esigenza, nemmeno troppo difficile dalla realtà, sia indispensabile dover convertire un numero o una variabile decimale in numero binario.
Ci sono naturalmente diverse soluzioni ma quella che vi propongo non fa utilizzo di programmi esterni ma è bash a tutti gli effetti.
Per prima cosa dobbiamo sapere il valore massimo del numero binario da ottenere in Bash ovvero in quanti bit potrà essere compreso.
Consideriamo che stiamo parlando di un byte e quindi 8 bit e cioè il numero binario andrà da 00000000 a 11111111 (da 0 a 255) allora possiamo scrivere:
bin=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
echo ${bin[*]}

Il più è fatto, infatti per avere il risultato ad esempio del numero 125 o di 78 in binario basta semplicemente
echo ${bin[125]}
01111101
echo ${bin[78]}
01001110
Se cambia il range del numero binario ad esempio se raddoppiamo o quadruplichiamo basta che definiamo la variabile bin con uno o due blocchi in più del tipo {0..1}.
Quindi riassumendo, la variabile bin dovrà contenere tanti blocchi {0..1} in base al numero massimo binario che si vuole ottenere cioè se il massimo numero è 2n -1 allora ci vorranno n gruppi {0..1}.
Come esempio se n=10 e quindi 210 -1=1023 i blocchi saranno 10
bin=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
echo ${bin[1023]}
1111111111
Vedi tutte le FAQsConvertire da Bash un numero decimale in esadecimale
Come per la faq con la conversione in binario anche in questa facciamo utilizzo delle fantastiche estensioni bash sulle parentisi graffe per convertire in esadecimale.
Quindi, considerando sempre la faq bash sul binario partiamo inizialmente con il convertire un numero decimale tra 0 e 255 che corrisponde ad una cifra esadecimale tra 0 ed FF:
hex=({{0..9},{a..f}}{{0..9},{a..f}})
echo ${hex[*]}

A questo punto per avere il risultato del numero 200 oppure di 21 basta
echo ${hex[200]}
c8
echo ${hex[21]}
15
Se cambia il range del numero esadecimale ad esempio se raddoppiamo o quadruplichiamo basta che definiamo la variabile hex con uno o due blocchi in più del tipo {0..9},{a..f}.
Quindi riassumendo, la variabile hex dovrà contenere tanti blocchi {0..9},{a..f} in base al numero massimo binario che si vuole ottenere cioè se il massimo numero è 16n -1 allora ci vorranno n gruppi {0..9},{a..f}.
Come esempio se n=4 e quindi 164 -1=65535 i blocchi saranno 4
hex=({{0..9},{a..f}}{{0..9},{a..f}}{{0..9},{a..f}}{{0..9},{a..f}})
echo ${hex[60000]}
ea60
echo ${hex[37]}
0025
Vedi tutte le FAQsCome convertire una netmask IPV4 in CIDR
Per passare da una netmask IPV4 a l’equivalente CIDR potrebbe venir in mente di fare la cosa più semplice ovvero utilizzare un blocco case o degli if annidati per ottenere il CIDR equivalente tanto i netmask o CIDR disponibili sono solo 32 e cioè
Netmask | Address/CIDR | Adresses |
255.255.255.255 | a.b.c.d/32 | 20 |
255.255.255.254 | a.b.c.d/31 | 20 |
255.255.255.252 | a.b.c.d/30 | 21 |
255.255.255.248 | a.b.c.d/29 | 22 |
255.255.255.240 | a.b.c.d/28 | 23 |
255.255.255.224 | a.b.c.d/27 | 24 |
255.255.255.192 | a.b.c.d/26 | 25 |
255.255.255.128 | a.b.c.d/25 | 26 |
255.255.255.0 | a.b.c.0/24 | 27 |
255.255.254.0 | a.b.c.0/23 | 28 |
255.255.252.0 | a.b.c.0/22 | 29 |
255.255.248.0 | a.b.c.0/21 | 210 |
255.255.240.0 | a.b.c.0/20 | 212 |
255.255.224.0 | a.b.c.0/19 | 213 |
255.255.192.0 | a.b.c.0/18 | 214 |
255.255.128.0 | a.b.c.0/17 | 215 |
255.255.0.0 | a.b.0.0/16 | 216 |
255.254.0.0 | a.b.0.0/15 | 217 |
255.252.0.0 | a.b.0.0/14 | 218 |
255.248.0.0 | a.b.0.0/13 | 219 |
255.240.0.0 | a.b.0.0/12 | 220 |
255.224.0.0 | a.b.0.0/11 | 221 |
255.192.0.0 | a.b.0.0/10 | 222 |
255.128.0.0 | a.b.0.0/9 | 223 |
255.0.0.0 | a.0.0.0/8 | 224 |
254.0.0.0 | a.0.0.0/7 | 225 |
252.0.0.0 | a.0.0.0/6 | 226 |
248.0.0.0 | a.0.0.0/5 | 227 |
240.0.0.0 | a.0.0.0/4 | 228 |
224.0.0.0 | a.0.0.0/3 | 229 |
192.0.0.0 | a.0.0.0/2 | 230 |
128.0.0.0 | a.0.0.0/1 | 231 |
0.0.0.0 | 0.0.0.0/0 | 232 |
Se vogliamo, invece, realizzare una funzione che converta il netmask in CIDR abbiamo bisogno di sapere come convertire un numero decimale in binario come prima cosa.
fromNetmaskToCidr() {
local netmask=$1
local bin=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
local b=''
local n
local cidr
for n in ${netmask//./ }; do
if [ $n -gt 255 ]; then
echo -e "\t[ERROR] netmask $netmask format error in '.$n'. I will use .255 insted of .$n"
n=255
fi
if [ $n -ne 0 -a $n -ne 128 -a $n -ne 192 -a $n -ne 224 -a $n -ne 240 -a $n -ne 248 -a $n -ne 252 -a $n -ne 254 -a $n -ne 255 ]; then
echo -e "\t[ERROR] netmask $netmask format error in '.$n' (it must be 0,128,192,224,240,248,252,254,255). I will use .255 insted of .$n"
n=255
fi
# $b is the binary of $netmask
b=${b}${bin[$n]}
done
# remove right "0" bits from $b
b=${b/%0*}
cidr=${#b}
echo $cidr
}
Quel che si fa è convertire i 4 ottetti del netmask in binario e metterli in serie nell’unica variabile “b” quindi rimuovere i bit a 0 presenti nella destra del numero binario complessivo.
Infine basta contare il numero dei bit rimasti per avere il CIDR che poi verrà restituito in uscita.
Riferimenti
Vedi tutte le FAQslvm
Aggiunta di un disco in LVM
Supponiamo di volere aggiungere un disco o una sua partizione nel gestore LVM di Linux e creare un volume group di nome “quollvg” con un volume logico di nome “quolllv” di dimensione 50GB.
controlliamo l’elenco dei dischi con il comando:
fidisk -l
Supponiamo che /dev/sdb sia il disco da aggiungere
Lanciamo il comando (lvm)
pvcreate /dev/sdb
Se abbiamo intenzione di usare una partizione, ad esempio la 1 del disco, dopo averla creata ed associato il tipo 83 (LVM) usiamo il comando:
pvcreate /dev/sdb1
A questo punto creiamo il volume group ed il volume logico, formattiamo e montiamo il nuovo disco :
vgcreate quollvg /dev/sdb
lvcreate -L 50G -n quolllv quollvg
mkdir /quolllv
mkfs.ext4dev -m 1 /dev/quolvg/quollv
mount /dev/mapper/quollvg-quolllv /quolllv
Per vedere lo stato del volume logico e del volume group:
lvdisplay
vgdisplay
Vedi tutte le FAQs
Aggiungere un disco ad un volume group in LVM
Supponiamo di aver un volume group LVM di nome “quollvg” pieno o quasi pieno e di voler aggiungere dell’altro spazio avendo a disposizione un altro disco o un’altra partizione libera.
Supponiamo che il disco libero sia /dev/sdc (o /dev/sdc1) allora quello che dobbiamo fare è semplicemente:
pvcreate /dev/sdc
vgextend quollvg /dev/sdc
Vedi tutte le FAQs
Aumentare la dimensione di una partizione LVM
Supponiamo di voler aumentare di 10G la dimensione della partizione ext4 del volume logico “quolllv” appartenente al volume group “quollvg”.
Per prima cosa controlliamo che il volume group “quollvg” abbia almeno 10GB liberi (sarebbe bene per un system administrator lasciare sempre libero in ogni volume group almeno dal 3% al 5% dello spazio nel caso in cui serva fare una snap per il backup o per qualche altro motivo)
vgdisplay quollvg
e controllare la sezione “Free PE / Size” per verificare che ci sia spazio disponibile.
Usare il comando per allargare il logical volume “quolllv“:
lvresize -L +10G /dev/quollvg/quolllv
A questo punto il logical volume “quolllv” è più grande di 10GB; bisogna quindi farlo sapere anche al file system ext4:
resize2fs /dev/mapper/quollvg-quolllv
Il resize2fs viene fatto anche caldo (a disco montato) quindi non preoccupatevi se è occupato da altro e non può esser smontato
Vedi tutte le FAQsCome creare una snapshot di un logical volume
Supponiamo di voler creare una snapshot del logical volume “quolllv” già esistente appartenente al volume group “quollvg“.
Controlliamo prima che ci sia spazio a sufficienza nel volume group:
vgdisplay quollvg
Controlliamo che “Free PE / Size” non sia tutto già occupato e supponiamo di avere 5GB di spazio da poter utilizzare per la snapshot:
lvcreate -L +5G -s -n "quolllv_snap" /dev/quollvg/quolllv
A questo punto abbiamo a disposizione la snapshot come verificabile digitando il comando:
lvdisplay
Possiamo quindi montarla ed utilizzarla:
mkdir /snap
mount /dev/mapper/quollvg-quolllv_snap /snap
Dopo averci lavorato (ad esempio dopo il backup) possiamo tranquillamente eliminare la snapshot:
umount /snap
lvremove -f /dev/quollvg/quolllv_snap
rmdir /snap
Vedi tutte le FAQs
openssl
Estrazione del contenuto di un file firmato digitalmente (p7m)
Consideriamo il caso in cui il documento firmato sia un pdf (documento.pdf.p7m).
Per estrarre il file contenuto utilizziamo il comando openssl con il parametro smime per la verifica della firma (-verify)
openssl smime -verify -noverify -in documento.pdf.p7m -inform DER -out documento.pdf
Per maggiori informazioni vedere l’articolo
Vedi tutte le FAQsEstrazione del certificato di un file firmato digitalmente (p7m)
Consideriamo il caso in cui il documento firmato sia un pdf (documento.pdf.p7m).
Per estrarre il certificato utilizzato per firmare il p7m utilizziamo il comando openssl con il parametro pkcs
openssl pkcs7 -inform DER -in documento.pdf.p7m -print_certs -out cert.pem
il certificato verrà estratto nel file cert.pem e se si vuole visualizzare in modo testuale basta il comando per i certificati x509
openssl x509 -in cert.pem -text -noout
Per maggiori informazioni vedere l’articolo
Vedi tutte le FAQsVerifica della firma di un documento p7m
Consideriamo il caso in cui il documento firmato sia un pdf (documento.pdf.p7m).
Per verificare la firma ed estrarre il file contenuto utilizziamo il comando openssl con il parametro smime per la verifica della firma (-verify)
openssl smime -in documento.pdf.p7m -inform DER -verify -CAfile CA.pem -out documento.pdf
Dove CA.pem contiene il certificato della CA (Certificate Authority) che ha rilasciato il certificato presente nel p7m.
Per maggiori informazioni vedere l’articolo
Vedi tutte le FAQsTrust certificate authority per firma digitale
Se si tenta di verificare la firma di un file p7m senza il certificato dell’ente certificatore (la CA), la verifica fallisce (“unable to load certificate“) perché non abbiamo i certificati di fiducia della CA (i cosiddetti Trust).
Tali Certificate Authority sono state definite per legge italiana e sono registrati sul CNIPA, che dal dicembre 2009 è diventato DigitPA, come portafoglio di certificati XML e li ho trovati sullo stesso sito all’indirizzo https://applicazioni.cnipa.gov.it/TSL/_IT_TSL_signed.xml.
Per far in modo che openssl li gestisca bisogna metterli nel suo formato quindi:
wget -O - https://applicazioni.cnipa.gov.it/TSL/_IT_TSL_signed.xml | perl -ne 'if (/<X509Certificate>/) {
s/^\s+//; s/\s+$//;
s/<\/*X509Certificate>//g;
print "-----BEGIN CERTIFICATE-----\n";
while (length($_)>64) {
print substr($_,0,64)."\n";
$_=substr($_,64);
}
print $_."\n";
print "-----END CERTIFICATE-----\n";
}' >CA.pem
In tal modo abbiamo tutti i certificati presenti in un unico file CA.pem, purtroppo anche quelli che forse sono scaduti.
Anche se scaduti potremmo aver bisogno di verificare un file vecchio e quindi ci possono servire anche gli scaduti.
Per maggiori informazioni vedere l’articolo
perl
Estrarre tutte le chiavi GPG pubbliche da un file
Supponiamo di avere un file di nome “file-con-chiavi-gpg” e di volerle estrarre eliminando ogni altra riga presente nel file.
perl -ne 'print if /-----BEGIN PGP PUBLIC KEY BLOCK-----/../-----END PGP PUBLIC KEY BLOCK-----/' file-con-chiavi-gpg
Naturalmente estrapolando la logica potremmo voler stampare tutte le righe comprese tra due regexp
perl -ne 'print if /regex1/../regex2/' file.txt
Vedi tutte le FAQsAggiungere 1 a tutti i numeri presenti su una stringa
$str =~ s/(\d+)/$1+1/ge
Vedi tutte le FAQsNumerare un file di testo
Supponiamo di avere un file di testo (prova.txt) che vogliamo numerare. Possiamo utilizzare:
perl -pe '$_ = "$. $_"' prova.txt
Se si vuole simulare l’output di cat -n prova.txt basta usare:
perl -ne 'printf "% 5d %s", $., $_' prova.tx
Per togliere la numerazione possiamo utilizzare:
perl -pe 's/^\s*\d+\s*//' prova.txt
Vedi tutte le FAQsEncode/decode un file o stringa in Mime Base64
Supponiamo aver una stringa “Prova encode” ed un file “prova.txt” da voler encodare in Mime base64. Per risolvere il problema possiamo semplicemente lanciare la riga di comando:
perl -MMIME::Base64 -e 'print encode_base64("Prova encode")'
perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' prova.txt
Per l’operazione inversa basta fare:
perl -MMIME::Base64 -le 'print decode_base64("stringa in base64")'
perl -MMIME::Base64 -ne 'print decode_base64($_)' prova.base64
Vedi tutte le FAQs
Stampare solo la linea 25 di un file
Supponiamo di voler stampare solamente una singola linea di un file, che per comodità indichiamo con la linea 25
perl -ne '$. == 25 && print && exit' file.txt
Naturalmente se vogliamo stampare anche le righe 31 e 57
perl -ne '($. == 25 || $. == 31 || $. == 57) && print' file.txt
Mentre se volessimo tutte le righe tra la 25 e la 57 comprese
perl -ne 'print if $. >= 25 && $. <= 57' file.txt
Vedi tutte le FAQsRinominare un gruppo di file in base ad una regexpr
Supponiamo di voler rinominare il nome di un gruppo di file che hanno il seguente template:
file1_tmp.sh
file2_tmp.sh
...
file99_tmp.sh
e supponiamo di voler togliere la parte centrale ‘_tmp’ in tutti i file. Possiamo utilizzare il comando “rename” o “prename”:
rename 's/_tmp//' *.sh
Vedi tutte le FAQs
Come contare il numero di volte che un singolo carattere è presente in ogni riga di un file
Supponiamo di avere un file di testo di nome “file.csv” e di voler contare per ogni riga il numero di volte che si presenta un carattere, ad esempio il carattere “,“.
Supponiamo che il risultato sia l’output dello stesso file “file.csv” preceduto in ogni riga dal conteggio stesso.
Basta semplicemente la seguente singola riga perl:
perl -ne '@c=$_=~/;/g; print scalar(@c)." ". $_;' file.csv
Vedi tutte le FAQs
ruby
Generazione password casuale con Ruby
Supponiamo di voler generare una password casuale, robusta ed abbastanza sicura utilizzando Ruby allora creiamo un funzione “random_password” che restituisce una password con 12 caratteri oppure se ne vogliamo una con più o meno dobbiamo passare questo valore come parametro.
Innanzi tutto definiamo il range dei caratteri ammissibili per la password
$CHARS = ('0'..'9').to_a + ('A'..'Z').to_a + ('a'..'z').to_a + ('#'..'&').to_a + (':'..'?').to_a
quindi la funzione
def random_password(length=12)
p=''
(0..length).each do
p+=$CHARS[rand($CHARS.size)]
end
return p
end
Infine basta utilizzare la funzione appena creata per avere la password casuale:
puts random_password
puts random_password(15)
test_pwd=random_password
puts test_pwd
Vedi tutte le FAQsssh
ssh: come importare la chiave pubblica su un host
Supponiamo di aver già a disposizione le nostre chiavi pubbliche e private ssh o creiamole per la prima volta con il comando
ssh-keygen
Le chiavi create sono sotto $HOME/.ssh/id* e le pubbliche finiscono con .pub
Abilitare l’ssh-agent ed aggiungere le chiavi con il comando
ssh-add
Per importare la chiave sull’host “mioserver” di cui abbiamo accesso tramite l’utente “mioutente” basta il comando
ssh-copy-id mioutente@mioserver
In tal caso tutte le chiavi pubbliche vengono copiate nel server “mioserver“.
Se si vuol copiare solo la chiave “rsa” basta lanciare il comando
ssh-copy-id -i $HOME/.ssh/id_rsa mioutente@mioserver
Vedi tutte le FAQs
Come cambiare la password ssh
ssh-keygen -p
Vedi tutte le FAQsCome lanciare un comando su un host remoto in ssh
Per lanciare un comando remoto basta passarlo come ultimo parametro al comando ssh.
Supponiamo ad esempio di volere la lista dei file della home page di “mioutente” su “mioserver”
ssh mioutente@mioserver ls -alh
Per fare, invece, il backup di tutta la home con il comando tar e salvare tutto in locale tramite comando ssh, lanciamo
ssh mioutente@mioserver tar czvf - . >miobackup.tgz
Vedi tutte le FAQsUtilizzare ssh come server/proxy SOCKS5
Supponiamo di voler utilizzare “mioserver” come server/proxy SOCKS5 e configurarlo sul browser locale facciamo
ssh mioutente@mioserver
mioutente@mioserver:~$ ssh -N -D 8080 localhost
A questo punto basta configurare nel browser l’utilizzo del server “mioserver” su porta “8080” come SOCKS5 e navigare.
Aggiungere l’opzione “-f” di ssh per lasciare il comando in background.
Come redirigere una connessione remota in locale tramite ssh
Supponiamo che l’host “mioserver” sia autorizzato ad accedere su una DMZ al server mysql della server farm, per poter accedere direttamente anche con il computer locale al server mysql possiamo lanciare il comando locale
ssh -L 3333:mysql_server_name_o_ip:3306 mioutente@mioserver
Lasciando il comando attivo ora abbiamo un canale/tunnel criptato tra il computer locale e “mioserver” sulla porta locale 3333 che si connette direttamente al server mysql in DMZ (di nome mysql_server_name_o_ip).
Possiamo quindi connetterci direttamente al server mysql con il comando
mysql -P 3333 -h 127.0.0.1 -u mioutentemysql -p miodatabasemysql
Oppure se si preferisce utilizzare phpMyAdmin basta installarlo in locale e configurarlo sulla porta locale 3333.
Per togliere il canale criptato basta chiudere la connessione ssh.
Vedi tutte le FAQsRedirigere un servizio locale in remoto con ssh
Supponiamo di volerci connetterci da casa al pc dell’ ufficio (che può accede al server “mioserver” in server farm) non raggiungibile nemmeno in VPN; basta che dal pc di ufficio lanciamo il comando ssh:
ssh -N -f -R 2222:localhost:22 mioutente@mioserver
lasciandolo attivo (senza spegnere il computer).
Da casa basta abilitare la VPN per poter raggiungere “mioserver” e connettersi al server
ssh mioutente@mioserver
mioutente@mioserver:~$ ssh -P 2222 utente_pc_lavoro@localhost
utente_pc_lavoro@localhost:~$
In tal modo si riesce ad entrare nel pc dell’ufficio da casa.
Vedi tutte le FAQswordpress
Lazy loading img con wordpress utilizzando il tema
Fino ad oggi con WordPress, senza aggiungere plugin, non è possibile avere un caricamento delle immagini di tipo “lazy” (lazy loading), ovvero in maniera asincrona cioè solo se l’immagine rientra o sta per rientrare nella viewport del browser.
Solo così i tempi di caricamento della pagina si riducono di molto e quindi è importante sia conoscere che abilitare il caricamento “lazy“.
Perché il browser carichi le immagini in modalità “lazy” bisogna utilizzare il tag html onloading=”lazy” nell’elemento “img“.
Dato che per ora non è ancora utilizzabile tramite l’editor di WordPress aggiungiamo al nostro tema (meglio se usiamo un child tema) una funzione nel file principale functions.php:
function quoll_filter_the_content( $content ) {
// Check if we're inside the main loop in a post or page.
if ( ( is_single() || is_page() ) && in_the_loop() && is_main_query() ) {
// remove loading tag in img elements if exist
$content=preg_replace('/]?)loading="[^"]"\s*/',"<img $1",$content);
// add loading="lazy" in img elements
return preg_replace('/<img\s+/','<img loading="lazy" ',$content);
}
return $content;
}
add_filter( 'the_content', 'quoll_filter_the_content', 99 );
Se necessario puliamo la cache di WordPress e controlliamo che le immagini si carichino asincronamente.
Controlliamo anche la lista dei browser che rispettano l’attributo “onloading=”lazy“
Novità WordPress 5.5
Da WordPress 5.5 dovrebbe esser inglobato il lazy-loading come da articolo ufficiale.
Riferimenti
- WordPress è un potente software open source che puoi usare facilmente, e liberamente, per creare siti, blog, forum, app;
- l’attributo lazy loading per caricare le immagini immediatamente o quando una condizione si verifica;
- lista dei browser che rispettano il caricamento lazy tramite tag “onloading“;
- come realizzare un tema con WordPress;
- come realizzare un child tema (o tema figlio) con wordPress;
- Articolo ufficiale WordPress che la versione 5.5 ingloba il lazy-loading sulle immagini.
Lazy loading plugin: img con wordpress utilizzando un plugin apposito
Come già scritto nella FAQ precedente su WordPress e su “lazy loading” per far in modo che in WordPress le immagini si carichino in maniera asincrona in base all’attuale viewport del browser non è possibile farlo tramite l’editor integrato ma bisogna utilizzare appositi temi o plugin.
Ora vediamo lo stesso funzionamento della FAQ precedente utilizzando un plugin (un lazy loading plugin) invece che scrivere una funzione direttamente nel tema.
In questo modo anche cambiando tema l’effetto “lazy” rimarrebbe.
Lazy loading plugin
Supponiamo di chiamare il plugin “quoll_img_lazy_loading” allora il file principale nella sua directory, “quoll_img_lazy_loading.php” dovrà contenere almeno il seguente codice:
function quoll_img_lazy_loading_filter_the_content( $content ) {
// Check if we're inside the main loop in a post or page.
if ( ( is_single() || is_page() ) && in_the_loop() && is_main_query() ) {
// remove loading tag in img if exist
$content=preg_replace('/<img\s+([^>]*?)loading="[^"]*"\s*/',"<img $1",$content);
// add loading="lazy" in img elements
return preg_replace('/<img\s+/','<img loading="lazy" ',$content);
}
return $content;
}
add_filter( 'the_content', 'quoll_img_lazy_loading_filter_the_content', 100 );
Naturalmente mancano le intestazioni del plugin.
Il plugin completo lo possiamo trovare su GitHub.
Se invece vogliamo utilizzare anche un po’ di javascript per rendere l’effetto “lazy” sulle immagini più compatibile con tutti i browser basta dare un occhio al progetto “quoll_img_lazy_loading_plus“.
Novità WordPress 5.5
Da WordPress 5.5 dovrebbe esser inglobato il lazy-loading come da articolo ufficiale.
Riferimenti
- Plugin WordPress “quoll_img_lazy_loading” su GitHub
- WordPress è un potente software open source che puoi usare facilmente, e liberamente, per creare siti, blog, forum, app;
- l’attributo lazy loading per caricare le immagini immediatamente o quando una condizione si verifica;
- lista dei browser che rispettano il caricamento lazy tramite tag “onloading“;
- Come realizzare un plugin con WordPress;
- Articolo ufficiale WordPress che la versione 5.5 ingloba il lazy-loading sulle immagini.