Vi è mai capitato di creare uno shortcode per WordPress contenente un blocco di HTML e che, al momento di eseguire l’output dell’HTML, il blocco viene stamapato in un punto sbagliato della pagina?
Ad esempio:
1 2 3 4 | add_shortcode('my_shortcode', 'myFunct'); function myFunct(){ ?> <h1>Hello Ladies!</h1> <?php } |
Soluzione corretta
La soluzione assolutamente corretta è quella di utilizzare la funzione di return(); piuttosto che utilizzare echo() o immergere il codice HTML direttamente dentro allo shortcode di WordPress, è anche vero che per blocchi html molto grandi questa operazione può essere scomoda, per cui esiste un work-around ottimo in questi casi, utilizzare la funzione ob_start() di PHP.
Soluzione smart
come si può vedere dallo snippet subito dopo la dichiarazione della funzione viene chiamata ob_start(). Questa funzione PHP permette di bloccare il normale output della funzione e di salvarlo temporameamente in un buffer (memoria volatile), l’HTML non sarà quindi stampato normalmente ma verrà salvato in questo buffer. Al termine della funzione utilizziamo return ob_get_clean() che non fa altro che restituire il buffer salvato finora ed elimina il buffer stesso. Ecco lo snippet finale
LO Snippet
ecco lo snippet pronto per il copia-incolla 🙂
1 2 3 4 5 6 7 8 9 10 11 | /** * Developer Corsaro.it - Shortcode HTML Output * Website: https://developercorsaro.it * cesare@developercorsaro.it */ add_shortcode('my_shortcode', 'myFunct'); function my_shortcode() { ob_start(); ?> <HTML> <here> ... <?php return ob_get_clean(); } |