WordPress e Youtube: funzioni e shortcode

L’oEmbed di YouTube non produce markup HTML valido e il video risultante rimane sempre in cima ad ogni altro elemento della pagina, compreso un menu a discesa. Nell’articolo trovate una serie di nuove funzioni ad hoc con cui risolvere il problema in maniera elegante.

Questo è un post tecnico di 7 anni fa. Le istruzioni potrebbero non essere più valide.

Sulla scia del post precedente, completo quanto già scritto con alcune indicazioni che magari possono tornare utili. L’argomento riguarda sempre WordPress e YouTube e come pubblicare un video evitando i problemi evidenziati prima. Alla funzione dell’articolo precedente qui aggiungo una carrellata di altre funzioni o, per essere più precisi, la medesima con alcune differenze: a seconda dei casi, può tornare utile l’una o l’altra.

Queste funzioni vanno inserite nel file functions.php del proprio tema: si scelga quella che più è congeniale con ciò che si deve fare o, se si vuole, possono essere usate tutte contemporaneamente.

Funzione 1. Inserire il video prelevandone l’URL da campo personalizzato e specificandone le dimensioni

Questa funzione, utile per chi sviluppa template, va utilizzata direttamente nel codice del tema: essa preleva l’indirizzo completo della pagina del video dal campo personalizzato (“video”) del post presente nel loop; si possono specificare le dimensioni nel richiamo della funzione, altrimenti essa applicherà quelli standard stabiliti nella funzione stessa. Eccola:

// Video di YouTube da campo personalizzato
// Esempio d'uso: youtubeCF('425', '344')
function youtubeCF($width = '425', $height = '344') {
	global $post;
	$videocf = substr(get_post_meta($post->ID, 'video', true), 31, 11);
	echo '<p><object type="application/x-shockwave-flash" data="http://www.youtube.com/v/'.$videocf.'&amp;hl=it_IT" width="'.$width.'" height="'.$height.'">
		<param name="movie" value="http://www.youtube.com/v/'.$videocf.'&hl=it_IT" />
		<param name="FlashVars" value="playerMode=embedded" />
		<param name="wmode" value="transparent" />
	</object></p>';
}

Il campo personalizzato è stabilito in “video”: potete cambiarlo nella funzione a quello che volete (riga 5). La funzione va richiamata così:

<?php youtubeCF('220', '178'); ?>

dove i due numeri sono le dimensioni di uscita del video (base, altezza). La si può utilizzare in sidebar, ad esempio, per presentare i video della sezione Multimedia del blog.

Funzione 2. Inserire il video specificandone l’URL e le dimensioni

Rispetto alla funzione di qui sopra, questa è più un esempio di come inserire un video direttamente nel file di un template e va modificata ogni volta nel template stesso. In questo caso vanno specificati l’indirizzo del video (sempre nella forma della URL della pagina) e, se lo si vuole, anche le dimensioni, altrimenti verranno usate quelle predefinite nella funzione.

// Video di YouTube da URL completo
// Esempio d'uso: youtubeURL('http://www.youtube.com/watch?v=kC9Ju63Bchk', '425', '344');
function youtubeURL($url = false, $width = '425', $height = '344') {
	$videourl = substr($url, 31, 11);
	echo '<p><object type="application/x-shockwave-flash" data="http://www.youtube.com/v/'.$videourl.'&amp;hl=it_IT" width="'.$width.'" height="'.$height.'">
		<param name="movie" value="http://www.youtube.com/v/'.$videourl.'&amp;hl=it_IT" />
		<param name="FlashVars" value="playerMode=embedded" />
		<param name="wmode" value="transparent" />
	</object></p>';
}

La funzione va richiamata così:

<?php youtubeURL('http://www.youtube.com/watch?v=kC9Ju63Bchk', '220', '178'); ?>

dove l’indirizzo è quello del video da mostrare e i due numeri sono le dimensioni di uscita del video (base, altezza).

Passiamo agli shortcode.

Shortcode 1. Inserire il video specificandone l’URL e le dimensioni

Questa funzione è la stessa di quella del post precedente, con la differenza che qui possiamo anche specificarne le dimensioni di uscita. La funzione è richiamabile nel box di scrittura dell’articolo perché è agganciata a uno shortcode. Ciò significa che quando volete visualizzare un video vi basterà inserire tra le righe dell’articolo lo shortcode necessario. Ecco la funzione:

// Shortcode per visualizzare un video da Youtube specificandone l'URL
function youtubeVideo($atts) {
	extract(shortcode_atts(array(
		'video' => '',
		'width' => '425',
		'height' => '344'
	), $atts));
	$videoID = substr($video, 31, 11);
	return '<p><object type="application/x-shockwave-flash" data="http://www.youtube.com/v/'.$videoID.'&amp;hl=it_IT" width="'.$width.'" height="'.$height.'">
			<param name="movie" value="http://www.youtube.com/v/'.$videoID.'&amp;hl=it_IT" />
			<param name="FlashVars" value="playerMode=embedded" />
			<param name="wmode" value="transparent" />
	</object></p>';
}
add_shortcode("youtube", "youtubeVideo");

Lo shortcode va richiamato nel post così:

[youtube video="http://www.youtube.com/watch?v=kC9Ju63Bchk" width="220" height="178"]

È necessario solo inserire l’URL della pagina del video, mentre è facoltativo specificarne le dimensioni.

Shortcode 2. Prelevare il video da un campo personalizzato

Se nel post, per altre ragioni, avete già un campo personalizzato in cui è presente l’URL del video di YouTube, potete usare questo semplicissimo shortcode per richiamarlo nel testo dell’articolo:

// Shortcode per visualizzare un video di Youtube prelevando l'URL da campo personalizzato
function youtubeSCF($atts) {
	global $post;
	extract(shortcode_atts(array(
		'width' => '425',
		'height' => '344'
	), $atts));
	$videoscf = substr(get_post_meta($post->ID, "video", true), 31, 11);
	return '<p><object type="application/x-shockwave-flash" data="http://www.youtube.com/v/'.$videoscf.'&amp;hl=it_IT" width="'.$width.'" height="'.$width.'">
		<param name="movie" value="http://www.youtube.com/v/'.$videoscf.'&hl=it_IT" />
		<param name="FlashVars" value="playerMode=embedded" />
		<param name="wmode" value="transparent" />
	</object></p>';
}
add_shortcode("youtubescf", "youtubeSCF");

Potete richiamare questo shortcode semplicemente con

[youtubescf]

oppure specificando le dimensioni di uscita:

[youtubescf width="425" height="344"]

Autore: Aldo Latino

Aldo Latino usa con entusiasmo Linux nella distribuzione Ubuntu, è un appassionato di WordPress e si diletta a fare il blogger. Ha anche una lista dei desideri. Per altre informazioni visita la sua .

8 pensieri riguardo “WordPress e Youtube: funzioni e shortcode”

  1. SAlve

    Ho inserito questo codice su un sito e mi va.

    POi ho provato a inserirlo su un altro mio sito e non funziona.

    Ho sentito che non tutti i template sono uguali e forse questo codice non va bene per il mio secondo sito.

    IL template con cui ho provato è questo

    http://topwpthemes.com/dione/

    mi potrebbe aiutare??

    è da 2 settimana che provo e non riesco a mettere i video di youtube senza inserire il codice object nel campo html.

    Perchè voglio che i miei aiutori , che non hanno i diritti per inserire codici iframe, di inserire i video di youtube.

    Grazie

    1. Ma perché i tuoi autori non incollano nel post solo il link al video su Youtube? Ci penserà poi WordPress a trasformarlo in codice.

      Comunque, è evidente che il tema del secondo sito va in conflitto con lo shortcode. Invece del codice inserito nel post, usa lo shortcode che ho pubblicato qui: http://pastebin.com/CtfbT91V

      Fammi sapere se risolvi.

      Ciao.

I commenti sono chiusi