Premessa
Woocomerce non permette di inserire i video nella galleria immagini; questo può essere fatto tramite plugin e video interni al sito, mentre si dovrebbe creare una struttura ad hoc per il caricamento di video esterni. Per poter quindi inserire innumerevoli video prodotto sulla scheda, si è realizzato un TAB dedicato ai video, caricato come link tramite impostazioni personalizzate sulla scheda prodotto.
Scopo
Creare un TAB dedicato ai video del prodotto, potendo inserire i video sia nella scheda prodotto di Woo che nei plugin di Bulker prodotti e integrare anche i video agganciati dai plugin dropshipping
Strumenti e Studi
- Conoscenza Funzioni WP – Woo
- Codice PHP (funzioni WP e WooCommerce)
- WP: 6.8
- Plugin: Woocommerce 10
- Layout Responsive: Desktop, Mobile, Tablet
Risultato Grafico

Codice realizzato
- Codice ShortCODE Vista Video
- CODICE N.Video nel Tab Title
Story map:
- Creazione Codice Shortcode
- Richiamo video plugin Dropshipping, con eventuali controlli e esistenze
- Richiamo Campi Video Personalizzati (ACF) con eventuali esistenze e controlli
- Miglioramento richiamo video YouTube Short e non classici
// 4.1 Shortcode VIDEO - Add Shortcode - scrivi questo campo [acf_video_embed_prodotto]
add_shortcode( 'acf_video_embed_prodotto', 'short_acf_video_embed_prodotto' );
function short_acf_video_embed_prodotto ($atts = array(), $content = null) {
// Richiama Video default Plugin
$current_post_id = get_the_ID();
$show_video = get_post_meta($current_post_id,"_vi_wad_show_product_video_tab",true); //video deve essere visibile si no
if( $show_video == 'hide'){ $first_video =''; }
else {
if ( is_plugin_active( 'woocommerce-alidropship/woocommerce-alidropship.php' ) ) {
$first_video = do_shortcode('[ald_product_video product_id="'.$current_post_id .'"]');
}
}
//RICHIAMA linea ripetitore ACF ----------------------
if ( function_exists( 'get_field' ) ){
$rows = get_field('prodott_video_boxripetitore');
} else{$rows = array(); }
$video = '';
if( $rows ) { foreach( $rows as $row ) {
$singlevideo_url = $row['prodott_video_singolo_url'];
$class_video = 'th-el-video';
//VIDEO YOUTUBE e nello specifico short video di youtube che danno problemi a WP | se è youtube vediamo esempio 12 come valore
if( strpos($singlevideo_url,"youtube") != null && strpos($singlevideo_url,"shorts") != null ) {
// un video con la parola shorts non viene visto dal codice shortcode di WP, mentre con questa sostitutizione viene visto!
$singlevideo_url = str_replace("shorts/","watch?v=",$singlevideo_url);
$class_video = $class_video.' video-youtube-short';
}
//stampa video con embed video per visualizzarlo____________
if( strpos($singlevideo_url,"youtube") != null || strpos($singlevideo_url,"youtu") != null ){ //video ytoutube cambia visualizzatore
$class_video = $class_video.' video-youtube-embedbox';
$video .= '<div class="'.$class_video.'">'.do_shortcode('[video width="640" height="500" src="'.$singlevideo_url.'" /]').'</div>';
} else {
$video .= '<div class="'.$class_video.'">'.do_shortcode('[video width="640" height="500" src="'.$singlevideo_url.'" /]'). '</div>';
}
} }
//se non esistono video
if ($first_video =='' && $video == ''){ $HTML = '<div class="box-video no-video">Non ci sono video caricati per questo prodotto, prova a guardare ancora nella descrizione: il Tab qui a lato.</div>'; }
else{ $HTML = '<div class="box-video">'.$first_video.$video.'</div>'; } //ci sono almeno un video
// Stampa codice creato sulla pagina _______
return $HTML;
} //end function SHoRTCODE
//END -- 4.1 Shortcode VIDEO - Add Shortcode - scrivi questo campo [acf_video_embed_prodotto]
PHP![Implementazioni TAB Video su E-commerce - WooCommerce [Codice] 5 galleria video numero elementi intab](https://sito.barbaralerici.net/wp-content/uploads/2025/06/galleria-video-numero-elementi-intab.jpg)
Story map Codice per Numero in Tab:
Premessa: il TAB personalizzato VIDEO è stato creato con plugin dedicato per una questione di praticità visto che viene usato anche per altre necessità. Ma il TAB può essere semplicemente creato con la funzione dedicata.
In questo contesto il TAB ha un id specifico ‘2512_tab’ e viene caricato dal plugin con priorità estrema (ben 29999)
- Richiamo filtro Woo sui TAB
- Richiamo dei video sia del plugin dropshipping che i field video personalizzati
- Conteggio totale dei video
- Inserimento nel titolo del TAB il numero calcolato
// alcuni tab (con i numeri) sono creati con il plugin BeRocket - TAB woocommerce
add_filter( 'woocommerce_product_tabs', 'th_rename_product_tab', 29999 ); //la funzione di berocket usa questa priorità, quindi deve essere almeno uguale
function th_rename_product_tab( $tabs ) {
//variabili
$numero_Video = 0;
//ricava dati - Video presenti e numero
$current_post_id = get_the_ID();
$valueurl_video_ALD = get_post_meta($current_post_id,"_vi_wad_product_video",true); //video deve essere visibile si no
if ( function_exists( 'get_field' ) ){
$ripetitore_num_video = get_field('prodott_video_boxripetitore'); //dovrebbe uscire un numero, il numero di righe del video
} else { $ripetitore_num_video = null;}
if( isset($ripetitore_num_video) && $ripetitore_num_video !=''){ $numero_Video = intval( count($ripetitore_num_video) ); }
if( isset($valueurl_video_ALD) && $valueurl_video_ALD !=''){ $numero_Video ++; }
if( isset($tabs[ '2512_tab' ]) ){
$get_pretitle_video = $tabs[ '2512_tab' ][ 'title' ];
$tabs['2512_tab' ][ 'title' ] = $get_pretitle_video.' '.'('.$numero_Video.')';
}
//--------------------
return $tabs;
}
PHPDove si inseriscono e modificano i video esterni
I video per ogni prodotto possono essere inseriti sia nella scheda prodotto classica, ma anche es soprattutto tramite il plugin di Bulker per un inserimento veloce.
Codice per l’implementazione Bulker Prodotti
L’elenco di video aggiunto al prodotto è creato con un campo repeat ACF. Se questo si salva correttamente nella scheda prodotto, nel plugin Bulker il salvataggio del campo repeat ACF non avviene con lo schema corretto. E’ stato quindi implementato un codice che prima del salvataggio sul Bulker esso processasse un salvataggio “corretto” del field ACF. Altrimenti al salvataggio l’elemento non era correttamente salvato e quindi illeggibile.
// 4.2 QUANDO MODIFICHI I VIDEO IN BEAR BULK PLUGIN, questo fa aggiornare in modo corretto i video.
// GUIDE: https://www.advancedcustomfields.com/resources/update_sub_field/
// https://support.advancedcustomfields.com/forums/topic/repeater-update_field/
// https://support.advancedcustomfields.com/forums/topic/update-field-in-repeated-field-within-group/
//
add_filter('woobe_before_update_product_field', function( $value, $product_id, $field_key) {
// Per tutti i field video e il ripetitore
if( $field_key === 'prodott_video_boxripetitore_0_prodott_video_singolo_url' || $field_key === 'prodott_video_boxripetitore_1_prodott_video_singolo_url'
|| $field_key === 'prodott_video_boxripetitore_2_prodott_video_singolo_url' || $field_key === 'prodott_video_boxripetitore_3_prodott_video_singolo_url'
|| $field_key === 'prodott_video_boxripetitore_4_prodott_video_singolo_url' || $field_key === 'prodott_video_boxripetitore_5_prodott_video_singolo_url'
) {
//NOMI FILED ACF: -------------------
$RIPETITORE_nome = 'prodott_video_boxripetitore';
$ELEMENTO_SOTTO_RIPETIORE_nome = 'prodott_video_singolo_url';
//--Numero RIGA VIDEO e per array-----------
// dal field che modifichiamo in BEAR estaiamo ul numero del field tipo dal 'prodott_video_boxripetitore_2_prodott_video_singolo_url' ricaviamo 2 //ATTENZIONE che sul bulker questo valore è VIDEO 3
$string_array_repeatfield = $field_key;
// Using preg_match_all to extract numbers
preg_match_all('/\d+/', $string_array_repeatfield, $string_Number); //ora sulla variabile $string_array_repeatfield abbiamo il numero field (il numero dell'array)
//se il numero viene trovato da preg_match, allora inseriscilo nella variabile $Numb_row e convertilo in numero invece che testo
if ( isset($string_Number[0][0]) ) { $Numb_row_intval = intval( $string_Number[0][0] ); } else { $Numb_row_intval = null; }
//----------Genera la nuova gerarchia del ripetitore ----------------
if ( function_exists( 'get_field' ) ){
$ripetitore = get_field($RIPETITORE_nome, $product_id); // esce come valore una cosa simile: array( array("url=>'video1'),array("url=>'video2'), );
} else{ $ripetitore = array();}
//ripetitore esiste con almeno una riga
if($ripetitore != null && is_array( $ripetitore ) ){
$value_repeat = $ripetitore; //richiama il ripetitore
$list_array_number_row = array_map('intval', str_split($Numb_row_intval));
if ( isset($list_array_number_row) ) {
foreach($list_array_number_row as $nriga){
$keyArray = intval( $nriga);
if( isset($value_repeat[$keyArray]) ){ //potrebbe non esistere la $keyArray e dare errore grave Undefined array key 1
if( $value_repeat[$keyArray] == '' || $value_repeat[$keyArray] == null ){
$value_repeat[$keyArray] = array( "prodott_video_singolo_url" => null);
}
}
}
}
if( $value == '' || $value == null) { unset( $value_repeat[$Numb_row_intval]); } // se vuoi cancellare il video, elimina la linea video
else { $value_repeat[$Numb_row_intval] = array( "prodott_video_singolo_url" => $value); } //sostituisci i valori del campo
//ripetitore non esiste, non ha righe e quindi si deve mettere la prima
} else { $value_repeat = array();
$list_array_number_row = array_map('intval', str_split($Numb_row_intval));
foreach($list_array_number_row as $nriga){
$keyArray = intval( $nriga);
$value_repeat[$keyArray] = array( "prodott_video_singolo_url" => null);
}
// se il valore del video esiste, e non stai rendendo il campo vuoto, allora crea la riga
if( $value !== '' || $value !== null) { $value_repeat[$Numb_row_intval] = array( "prodott_video_singolo_url" => $value); }
}
//------END ----Genera la nuova gerarchia del ripetitore ----------------
// ESEMPIO array ripetitore
//$value_repeat = array(
// array( "prodott_video_singolo_url" => "1"),
// array( "prodott_video_singolo_url" => "2"),
// array( "prodott_video_singolo_url" => "3"),
// );
//var_dump('_ Ripetitore Get prima_'.'<pre>', get_field($RIPETITORE_nome, $product_id),'</pre>'.'<br>----------------<br>');
//var_dump('_ VALORE $value_repeat_'.'<pre>', $value_repeat,'</pre>'.'<br>----------------<br><br>');
//----AGGIORNA IL RIPETITORE ----------------
if ( function_exists( 'update_field' ) ){
update_field( $RIPETITORE_nome,$value_repeat, $product_id );
}
//*****************************************************
//var_dump('<br>ripeititore get DOPO_'.'<pre>', get_field($RIPETITORE_nome, $product_id),'</pre>'.'<br>----------------<br><br>');
} //FINE if( $field_key )
return $value;
}, 12, 3);
// END -- 4.2 QUANDO MODIFICHI I VIDEO IN BEAR BULK PLUGIN, questo fa aggiornare in modo corretto i video.
PHP![Implementazioni TAB Video su E-commerce - WooCommerce [Codice] 1 logo barbaralerici](https://sito.barbaralerici.net/wp-content/uploads/2025/03/Logo-blerici-chiaro-250px-desktop.webp)
![Implementazioni TAB Video su E-commerce - WooCommerce [Codice] 4 galleria-video-prodotti-woo](https://sito.barbaralerici.net/wp-content/uploads/2025/06/galleria-video-prodotti-woo.jpg)
![Implementazioni TAB Video su E-commerce - WooCommerce [Codice] 6 acf repeat product edit](https://sito.barbaralerici.net/wp-content/uploads/2025/03/acf-repeat-product-edit-.png)
![Implementazioni TAB Video su E-commerce - WooCommerce [Codice] 7 guida spiega anche come far in modo che la galleria creata](https://sito.barbaralerici.net/wp-content/uploads/2025/03/acf-repeat-bulker-1024x484.png)