WordPress: Output di uno shortcode contenente HTML

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
* [email protected]
*/

add_shortcode('my_shortcode', 'myFunct');
function my_shortcode() {
    ob_start();
    ?> <HTML> <here> ... <?php
    return ob_get_clean();
}

Lo hai trovato utile? Codividilo con i tuoi follower :)