/* ===== FDCI v3 operational layer ===== */ function fdci_v3_install(){ global $wpdb; $c=$wpdb->get_charset_collate(); require_once ABSPATH.'wp-admin/includes/upgrade.php'; dbDelta("CREATE TABLE {$wpdb->prefix}fdci_access_log (id bigint unsigned NOT NULL AUTO_INCREMENT,person_id bigint unsigned NULL,station varchar(100) NOT NULL,event_type varchar(60) NOT NULL DEFAULT 'access',product varchar(100) NULL,qty int NOT NULL DEFAULT 1,user_id bigint unsigned NULL,created_at datetime NOT NULL,PRIMARY KEY(id),KEY person_id(person_id),KEY station(station)) $c;"); if(!get_option('fdci_demo_seeded')){fdci_seed_demo();update_option('fdci_demo_seeded',1);} } register_activation_hook(__FILE__,'fdci_v3_install'); function fdci_seed_demo(){ $people=[ ['Alessandro Ferri','Artista / Premiato','NO','','A · Prioritario','Avvisare Produzione all’arrivo','Hotel Lago · 204','29/05 11:20','31/05 10:00','SÌ'], ['Laura Vitale','Sponsor / Partner','SÌ','Demo Energia S.p.A.','A · Prioritario','Auto dedicata · Hospitality','Hotel Castello · 108','29/05 12:10','31/05 09:00','SÌ'], ['Marta Bellini','Stampa','NO','Testata Demo','B · Dedicato','Accesso Press Area','Hotel Lago · 312','29/05 10:40','30/05 20:00','NO'], ['Roberto De Angelis','Giuria','NO','','A · Prioritario','Convocazione Giuria 16:30','Hotel Castello · 205','28/05 18:00','31/05 11:00','SÌ'], ['Chiara Conti','Staff · Hostess','NO','','C · Ordinario','Postazione Accrediti','','29/05 08:00','29/05 23:00','NO'], ['Davide Russo','Staff · Autista','NO','','B · Dedicato','Flotta · Auto 02','','29/05 07:30','29/05 23:30','NO'] ]; foreach($people as $x){if(get_page_by_title($x[0],OBJECT,'fdci_persona'))continue;$id=wp_insert_post(['post_type'=>'fdci_persona','post_status'=>'publish','post_title'=>$x[0],'post_content'=>'FAC-SIMILE · Scheda demo modificabile.']);$ks=['tipo','sponsor_flag','sponsor','livello','disposizioni','hotel','arrivo','partenza','redcarpet'];foreach($ks as $i=>$k)update_post_meta($id,'_fdci_'.$k,$x[$i+1]);update_post_meta($id,'_fdci_demo','1');} global $wpdb;$t=$wpdb->prefix.'fdci_tasks';if(!(int)$wpdb->get_var("SELECT COUNT(*) FROM $t")){foreach([['Assegnare autista a Laura Vitale','urgent','Transfer'],['Stampare pass ospite prioritario','urgent','Segreteria'],['Verificare camere Hotel Lago','important','Hospitality'],['Confermare skipper Barca 02','important','Nautica'],['Inviare programma serale alla Giuria','normal','Segreteria']] as $x)$wpdb->insert($t,['title'=>$x[0],'priority'=>$x[1],'department'=>$x[2],'status'=>'open','created_by'=>get_current_user_id(),'created_at'=>current_time('mysql')]);} } function fdci_v3_menu(){ add_submenu_page('fdci-control','Persone oggi','Persone oggi','edit_posts','fdci-people-today','fdci_people_today'); add_submenu_page('fdci-control','Arrivi e Transfer','Arrivi e Transfer','edit_posts','fdci-movements','fdci_movements'); add_submenu_page('fdci-control','Hotel e Rooming','Hotel e Rooming','edit_posts','fdci-hotels','fdci_hotels'); add_submenu_page('fdci-control','Pass e Red Carpet','Pass e Red Carpet','edit_posts','fdci-passes','fdci_passes'); add_submenu_page('fdci-control','Scanner QR','Scanner QR','edit_posts','fdci-scanner','fdci_scanner'); add_submenu_page('fdci-control','Presenze e Pasti','Presenze e Pasti','edit_posts','fdci-presence','fdci_presence'); add_submenu_page('fdci-control','Comunicazioni','Comunicazioni','edit_posts','fdci-comms','fdci_comms'); } add_action('admin_menu','fdci_v3_menu',20); function fdci_v3_bar(){if(!is_admin()||!current_user_can('edit_posts'))return;echo'
▦ SALA OPERATIVA✓ LE MIE COSE DA FAREOPERATORE: '.esc_html(wp_get_current_user()->display_name).'
';} add_action('in_admin_header','fdci_v3_bar'); add_action('admin_head',function(){echo'';}); function fdci_people_today(){fdci_ops_nav();$q=new WP_Query(['post_type'=>'fdci_persona','posts_per_page'=>100]);echo'

Persone Festival · Oggi

FAC-SIMILE: anagrafica unica per Ospiti, Stampa, Giuria, Sponsor e Staff.

';foreach($q->posts as $p){echo'';}echo'
PersonaTipoSponsorLivelloHotelRed Carpet
'.esc_html($p->post_title).''.esc_html(get_post_meta($p->ID,'_fdci_tipo',1)).''.esc_html(get_post_meta($p->ID,'_fdci_sponsor',1)).''.esc_html(get_post_meta($p->ID,'_fdci_livello',1)).''.esc_html(get_post_meta($p->ID,'_fdci_hotel',1)).''.esc_html(get_post_meta($p->ID,'_fdci_redcarpet',1)).'
';wp_reset_postdata();} function fdci_movements(){fdci_ops_nav();echo'

Arrivi, Partenze e Transfer

12:10 · FAC-SIMILE

Laura Vitale

Stazione → Hotel Castello

AUTISTA DA CONFERMARE

12:40

Delegazione Demo

Stazione → Media House

IN CORSO

18:00

4 ospiti

Pontile → Isola

SKIPPER DA CONFERMARE

Le missioni definitive saranno record modificabili e collegate a persona, autista, mezzo, orari e destinazione.

';} function fdci_hotels(){fdci_ops_nav();echo'

Hotel e Rooming List

Hotel Lago · DEMO

12 camere assegnate · 3 arrivi oggi

Hotel Castello · DEMO

18 camere assegnate · 5 arrivi oggi

Controlli

2 assegnazioni da verificare

Gestisci Hotel

';} function fdci_passes(){fdci_ops_nav();echo'

Pass / QR e Red Carpet

Pass attivi

FAC-SIMILE

Il QR definitivo sarà un token server-validato, revocabile e a scadenza.

Red Carpet

Autorizzazione esplicita SÌ/NO collegata alla persona.

Stati

🟢 Attivo · 🟠 Sospeso · 🔴 Revocato · ⚫ Scaduto

';} function fdci_scanner(){fdci_ops_nav();echo'

Scanner QR · Postazione Demo

Questa schermata è predisposta per scanner USB HID e fotocamera smartphone/PWA.

In attesa di scansione…
';} function fdci_presence(){fdci_ops_nav();echo'

Presenze e Pasti

Ospiti / Stampa

287 presenti reali su 323 previsti.

Staff

87 in servizio · 5 da verificare.

Pasti

Circuiti separati Ospiti/Stampa e Cucina Personale. Approdo: ingresso libero buffet, QR al bar per consumazioni.

';} function fdci_comms(){fdci_ops_nav();echo'

Centro Comunicazioni

Modalità TEST

La struttura è predisposta per singoli e gruppi: ospiti, stampa, giuria, staff, hotel, evento, reparto.

Email formale · Push · SMS urgente · Area personale

L’invio reale verrà attivato nello staging solo dopo configurazione del provider e test su destinatari autorizzati.

';} /* ===== FDCI 3.1 archivio + migrazione Wix ===== */ function fdci_archive_seed(){ if(get_option('fdci_archive_seed_31')) return; $awards=[ ['2020','Miglior Film','La vacanza','Enrico Iannaccone','VERIFICATO SITO UFFICIALE'], ['2020','Miglior Film Opera Prima','Non odiare','Mauro Mancini','VERIFICATO SITO UFFICIALE'], ['2020','Miglior Cortometraggio','Signorina con Sesamo','Giuseppe Moschella','VERIFICATO SITO UFFICIALE'], ['2020','Miglior Documentario','La lunga rotta','Roberto Lo Monaco','VERIFICATO SITO UFFICIALE'], ['2020','Miglior Attore Protagonista','Alessandro Gassmann','Non odiare','VERIFICATO SITO UFFICIALE'], ['2020','Miglior Attrice Protagonista','Sara Serraiocco','Non odiare','VERIFICATO SITO UFFICIALE'], ['2020','Miglior Attrice non Protagonista','Carla Signoris','La vacanza','VERIFICATO SITO UFFICIALE'], ['2020','Premio Franca Valeri','Matilde Gioli','','VERIFICATO SITO UFFICIALE'], ['2020','Personaggio dell’Anno','Amadeus','','VERIFICATO SITO UFFICIALE'], ['2020','Premio del Pubblico','Giorgia Farina','Guida romantica a posti perduti','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Film','Cosa sarà','Francesco Bruni','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Regia','Si muore solo da vivi','Alberto Rizzi','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Film Opera Prima','La tristezza ha il sonno leggero','Marco Mario De Notaris','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Cortometraggio','Tutte le strade','Samuel Di Marzo','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Documentario','Alberi','Gabriele Donati e Silvia Girardi','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Attore Protagonista','Kim Rossi Stuart','Cosa sarà','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Attore non Protagonista','Federico Rosati','Cobra non è','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Attrice Protagonista','Ivana Lotito','Rosa pietra stella','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Attrice non Protagonista','Lorenza Indovina','Cosa sarà','VERIFICATO SITO UFFICIALE'], ['2021','Miglior Attrice Rivelazione','Giulia Petrini','I predatori','VERIFICATO SITO UFFICIALE'], ['2021','Premio Vittorio Gassman','Antonio Catania','','VERIFICATO SITO UFFICIALE'], ['2021','Premio Franca Valeri','Donatella Finocchiaro','','VERIFICATO SITO UFFICIALE'], ['2021','Personaggio dell’Anno','Domenico Centamore','','VERIFICATO SITO UFFICIALE'], ['2021','Premio del Pubblico','Cobra non è','Mauro Russo','VERIFICATO SITO UFFICIALE'] ]; foreach($awards as $a){$key='seed-'.$a[0].'-'.sanitize_title($a[1].'-'.$a[2]);if(get_posts(['post_type'=>'fdci_premio','meta_key'=>'_fdci_seed_key','meta_value'=>$key,'posts_per_page'=>1]))continue;$id=wp_insert_post(['post_type'=>'fdci_premio','post_status'=>'publish','post_title'=>$a[0].' · '.$a[1].' · '.$a[2],'post_content'=>'Archivio storico importato dalla precedente presenza web del Festival.']);update_post_meta($id,'_fdci_seed_key',$key);update_post_meta($id,'_fdci_anno',$a[0]);update_post_meta($id,'_fdci_categoria_premio',$a[1]);update_post_meta($id,'_fdci_riferimento',$a[2]);update_post_meta($id,'_fdci_dettaglio',$a[3]);update_post_meta($id,'_fdci_verifica',$a[4]);} $works=[ ['2024','Film','Goffredo e l’Italia chiamò','Angelo Antonucci'],['2024','Film','Knockdown – The Suicide Format','Inessa Gordeiko'],['2024','Film','Il mio posto è qui','Cristiano Bortone / Daniela Porto'],['2024','Film','Il posto','Gianluca Vassallo'],['2024','Film','Una storia nera','Leonardo D’Agostini'],['2024','Film','Sei fratelli','Simone Godano'],['2024','Film','Un mondo a parte','Riccardo Milani'], ['2024','Cortometraggio','Il treno speciale','Luigi Cianciaruso'],['2024','Cortometraggio','Lui','Riccardo Meli'],['2024','Cortometraggio','Era ora','Valerio Manisi'],['2024','Cortometraggio','Bigger Than Me','Antonio Carannante / Laura Legner Samela'],['2024','Cortometraggio','Mano nella mano','Angelica Cacciapaglia'],['2024','Cortometraggio','Arriverà l’aurora','Beatrice Vargiu'],['2024','Cortometraggio','Il cuore rubato','Giuseppe Andreani'],['2024','Cortometraggio','Omayma','Fabio Schifilliti'],['2024','Cortometraggio','Il racconto di Ester','Simone Barletta'],['2024','Cortometraggio','Il mondo salvato dalle ragazzine','Maria Luisa Usai'], ['2026','Cortometraggio','Ciò che resta di Elena – Anime frammentate','Danila Trapani'],['2026','Cortometraggio','12 Passi','Fabrizio Denaro'],['2026','Cortometraggio','La buona condotta','Francesco Gheghi'],['2026','Documentario','Macbeth – Cuore Nero','Paola Beatrice Ortolani'],['2026','Cortometraggio','Fuliggine','Domenico Pisani'],['2026','Cortometraggio','Oltre il velo di Maya','Cristina Campagna / Gabriele Davì'],['2026','Cortometraggio','La ragazza d’Argento','Alex Scarpa / Margherita Giusti Hazon'],['2026','Film','Prendiamoci una pausa','Cristian Marazziti'],['2026','Cortometraggio','The Last Bet','Enzo Morzillo'],['2026','Cortometraggio','Servitori di Storie','Valerio Marcozzi'],['2026','Cortometraggio','Coscine di pollo','Federico Paolini'],['2026','Cortometraggio','2 Ali x 2 Elefanti','Nino Giuffrida'],['2026','Cortometraggio','Prova d’Amore','Denis Nazzari'],['2026','Cortometraggio','Mercato Libero (Call Bait)','Giuseppe Cacace'],['2026','Film','Baracoa','Luis Ernesto Donas'] ]; foreach($works as $w){$key='seed-'.$w[0].'-'.sanitize_title($w[2]);if(get_posts(['post_type'=>'fdci_opera','meta_key'=>'_fdci_seed_key','meta_value'=>$key,'posts_per_page'=>1]))continue;$id=wp_insert_post(['post_type'=>'fdci_opera','post_status'=>'publish','post_title'=>$w[2],'post_content'=>'Opera dell’archivio Festival · dati di base verificati sul precedente sito ufficiale.']);update_post_meta($id,'_fdci_seed_key',$key);update_post_meta($id,'_fdci_anno',$w[0]);update_post_meta($id,'_fdci_tipo_opera',$w[1]);update_post_meta($id,'_fdci_regia',$w[3]);update_post_meta($id,'_fdci_verifica','VERIFICATO SITO UFFICIALE');} update_option('fdci_archive_seed_31',1); } add_action('init',function(){if(current_user_can('manage_options'))fdci_archive_seed();},30); function fdci_migration_menu(){add_submenu_page('fdci-control','Migrazione vecchio sito','Migrazione vecchio sito','manage_options','fdci-migration','fdci_migration_page');} add_action('admin_menu','fdci_migration_menu',30); function fdci_wix_sources(){return [ 'https://www.festivaldelcinemaitaliano.net/', 'https://www.festivaldelcinemaitaliano.net/en/festival', 'https://www.festivaldelcinemaitaliano.net/en/edizionifinoal2022fdci', 'https://www.festivaldelcinemaitaliano.net/inconcorsoalfestivaldelcinemaitaliano2024', 'https://www.festivaldelcinemaitaliano.net/eventifestival', 'https://www.festivaldelcinemaitaliano.net/about-6' ];} function fdci_wix_original($u){$u=html_entity_decode($u);$u=preg_replace('~/v1/.*$~','',$u);return $u;} function fdci_migration_page(){ fdci_ops_nav(); echo'

Migrazione vecchio sito

Recupera automaticamente immagini Wix dalle pagine ufficiali e le importa nella Media Library. Eseguire nello staging, a piccoli gruppi, dopo backup.

'; if(isset($_POST['scan'])&&check_admin_referer('fdci_migrate')){ $urls=[];$errors=[]; foreach(fdci_wix_sources() as $src){$r=wp_remote_get($src,['timeout'=>25,'redirection'=>5]);if(is_wp_error($r)){$errors[]=$src.' · '.$r->get_error_message();continue;}$body=wp_remote_retrieve_body($r);preg_match_all('~https://static\\.wixstatic\\.com/media/[^"\\'<> )]+~i',$body,$m);foreach($m[0] as $u)$urls[]=fdci_wix_original($u);} $urls=array_values(array_unique(array_map('esc_url_raw',$urls)));update_option('fdci_wix_manifest',$urls,false);echo'

Trovati '.count($urls).' URL media unici. Manifest salvato.

';if($errors)echo'

'.esc_html(implode(' | ',$errors)).'

'; } if(isset($_POST['import'])&&check_admin_referer('fdci_migrate')){ require_once ABSPATH.'wp-admin/includes/file.php';require_once ABSPATH.'wp-admin/includes/media.php';require_once ABSPATH.'wp-admin/includes/image.php'; $urls=(array)get_option('fdci_wix_manifest',[]);$done=(array)get_option('fdci_wix_imported',[]);$n=0;$fail=0; foreach($urls as $u){if(isset($done[md5($u)]))continue;if($n>=20)break;$tmp=download_url($u,30);if(is_wp_error($tmp)){$done[md5($u)]=['status'=>'failed','error'=>$tmp->get_error_message(),'url'=>$u];$fail++;continue;}$name=basename(parse_url($u,PHP_URL_PATH));if(!$name)$name='festival-media-'.substr(md5($u),0,10).'.jpg';$id=media_handle_sideload(['name'=>$name,'tmp_name'=>$tmp],0,'Migrato dal precedente sito ufficiale FDCI');if(is_wp_error($id)){@unlink($tmp);$done[md5($u)]=['status'=>'failed','error'=>$id->get_error_message(),'url'=>$u];$fail++;}else{update_post_meta($id,'_fdci_source_url',$u);update_post_meta($id,'_fdci_migrated','1');$done[md5($u)]=['status'=>'ok','attachment_id'=>$id,'url'=>$u];$n++;}} update_option('fdci_wix_imported',$done,false);fdci_log('Import media Wix eseguito','migration',0,'Importati '.$n.'; errori '.$fail);echo'

Batch completato: '.$n.' importati, '.$fail.' errori. Ripeti “Importa prossimo batch” finché completato.

'; } $manifest=(array)get_option('fdci_wix_manifest',[]);$done=(array)get_option('fdci_wix_imported',[]);$ok=count(array_filter($done,fn($x)=>($x['status']??'')==='ok'));$failed=count(array_filter($done,fn($x)=>($x['status']??'')==='failed')); echo'

Stato media

Manifest: '.count($manifest).' · Importati: '.$ok.' · Errori: '.$failed.'

';wp_nonce_field('fdci_migrate');echo'

Ogni allegato importato conserva l’URL sorgente in un metadato. Gli errori restano nel registro per un recupero manuale.

'; echo'

Pagine sorgente

'; } /* ===== FDCI 4.0 · ENCICLOPEDIA / RUOLI / CULTURA / MUSICA / GRAN GALA ===== */ function fdci_register_encyclopedia_content(){ $extra=[ 'fdci_libro'=>['Libri e Pubblicazioni','Libro / Pubblicazione','libri'], 'fdci_tema'=>['Temi e Percorsi','Tema / Percorso','temi'], 'fdci_grangala'=>['Gran Galà / Eccellenze','Premio Gran Galà','gran-gala-eccellenze'], 'fdci_esibizione'=>['Musica e Spettacolo','Esibizione / Partecipazione','musica-spettacolo'] ]; foreach($extra as $slug=>$l) register_post_type($slug,['labels'=>['name'=>$l[0],'singular_name'=>$l[1],'add_new_item'=>'Aggiungi '.$l[1],'edit_item'=>'Modifica '.$l[1]],'public'=>true,'show_in_rest'=>true,'menu_position'=>21,'supports'=>['title','editor','thumbnail','excerpt','custom-fields'],'has_archive'=>true,'rewrite'=>['slug'=>$l[2]]]); register_taxonomy('fdci_ruolo',['fdci_persona'],['label'=>'Ruolo al Festival','public'=>true,'show_in_rest'=>true,'hierarchical'=>true]); register_taxonomy('fdci_ambito',['fdci_persona','fdci_evento','fdci_libro','fdci_tema','fdci_grangala','fdci_esibizione'],['label'=>'Ambito','public'=>true,'show_in_rest'=>true,'hierarchical'=>true]); } add_action('init','fdci_register_encyclopedia_content',12); function fdci_public_person_meta(){add_meta_box('fdci_person_public','Enciclopedia · partecipazione al Festival','fdci_person_public_box','fdci_persona','normal','high');} add_action('add_meta_boxes','fdci_public_person_meta'); function fdci_person_public_box($post){ wp_nonce_field('fdci_person_public_save','fdci_person_public_nonce'); $fields=['professione'=>'Professione / Chi è','ruolo_pubblico'=>'Ruolo al Festival','motivo'=>'Perché è al Festival / Info partecipazione','anno_ruolo'=>'Anno / Edizione','evento_ruolo'=>'Evento collegato','esibizione'=>'Esibizione / intervento / opera','fonte'=>'Fonte documentale','stato_verifica'=>'Stato verifica (VERIFICATO / DA VERIFICARE)']; foreach($fields as $k=>$lab){$v=get_post_meta($post->ID,'_fdci_pub_'.$k,true);echo'


';if($k==='motivo')echo'';else echo'';echo'

';} echo'

Il ruolo è riferito alla singola partecipazione/edizione: ospite, artista in esibizione, cantante, musicista, conduttore, co-conduttore, moderatore, giurato, presidente, presidente onorario, madrina/padrino, premiato, autore, relatore, masterclass, ospite istituzionale ecc.

'; } function fdci_person_public_save($id){if(!isset($_POST['fdci_person_public_nonce'])||!wp_verify_nonce($_POST['fdci_person_public_nonce'],'fdci_person_public_save')||(defined('DOING_AUTOSAVE')&&DOING_AUTOSAVE))return;foreach(['professione','ruolo_pubblico','anno_ruolo','evento_ruolo','esibizione','fonte','stato_verifica'] as $k)if(isset($_POST['fdci_pub_'.$k]))update_post_meta($id,'_fdci_pub_'.$k,sanitize_text_field($_POST['fdci_pub_'.$k]));if(isset($_POST['fdci_pub_motivo']))update_post_meta($id,'_fdci_pub_motivo',sanitize_textarea_field($_POST['fdci_pub_motivo']));} add_action('save_post_fdci_persona','fdci_person_public_save',20); function fdci_40_pages(){ $pages=[ 'Chi siamo'=>'L’identità del Festival e le persone che lo costruiscono oggi. Dalla direzione alle professionalità che rendono possibile ogni edizione.', 'Le persone del Festival'=>'L’enciclopedia dei protagonisti dal 2020 a oggi: direzioni artistiche, presidenti, presidenti onorari, giurie, conduttori, moderatori, ospiti, premiati, artisti e collaboratori.', 'Albo d’Oro Stelle d’Argento'=>'L’archivio storico dei riconoscimenti cinematografici del Festival, distinto per anno, categoria, opera e protagonista.', 'Albo d’Oro Gran Galà'=>'Dal Gran Galà in TV nato a Torregrotta nel 2021 alle successive edizioni integrate nel Festival, fino al Premio Tyndaris e al Premio Castello Isola Maggiore: l’archivio delle eccellenze premiate.', 'Gli Artisti del Festival'=>'Cantanti, musicisti, compositori, comici, conduttori, presentatori e performer che hanno partecipato al Festival dal 2020 a oggi.', 'La Musica del Festival'=>'Concerti, esibizioni, artisti, musicisti, compositori e momenti musicali che hanno accompagnato la storia del Festival.', 'Libri e Autori'=>'I libri presentati al Festival, gli autori, i moderatori, gli incontri e le conversazioni editoriali.', 'Le Voci del Festival'=>'Conduttori, presentatori e moderatori che hanno accompagnato serate finali, Gran Galà, incontri, libri, panel e masterclass.', 'Ambiente Cultura e Territorio'=>'Oltre il cinema: ambiente, ecologia, sostenibilità, territorio, arte, sociale, formazione e tavole rotonde.' ]; foreach($pages as $pt=>$pc) if(!get_page_by_title($pt)) wp_insert_post(['post_title'=>$pt,'post_type'=>'page','post_status'=>'publish','post_content'=>$pc]); } add_action('admin_init',function(){if(current_user_can('manage_options')&&!get_option('fdci_pages_40')){fdci_40_pages();update_option('fdci_pages_40',1);}}); /* SEO fields editable per content */ function fdci_seo_box_register(){foreach(array_merge(['page','post'],['fdci_edizione','fdci_persona','fdci_opera','fdci_premio','fdci_evento','fdci_partner','fdci_media','fdci_foto','fdci_libro','fdci_tema','fdci_grangala','fdci_esibizione']) as $pt)add_meta_box('fdci_seo','SEO · Google e condivisione','fdci_seo_box',$pt,'normal','low');} add_action('add_meta_boxes','fdci_seo_box_register',30); function fdci_seo_box($post){wp_nonce_field('fdci_seo_save','fdci_seo_nonce');$t=get_post_meta($post->ID,'_fdci_seo_title',true);$d=get_post_meta($post->ID,'_fdci_seo_description',true);$n=get_post_meta($post->ID,'_fdci_seo_noindex',true);echo'

';} function fdci_seo_save($id){if(!isset($_POST['fdci_seo_nonce'])||!wp_verify_nonce($_POST['fdci_seo_nonce'],'fdci_seo_save')||(defined('DOING_AUTOSAVE')&&DOING_AUTOSAVE))return;if(isset($_POST['fdci_seo_title']))update_post_meta($id,'_fdci_seo_title',sanitize_text_field($_POST['fdci_seo_title']));if(isset($_POST['fdci_seo_description']))update_post_meta($id,'_fdci_seo_description',sanitize_textarea_field($_POST['fdci_seo_description']));update_post_meta($id,'_fdci_seo_noindex',isset($_POST['fdci_seo_noindex'])?'1':'0');} add_action('save_post','fdci_seo_save',40); /* Migrazione SEO: archivio modificabile vecchio URL -> nuovo URL */ function fdci_seo_migration_menu(){add_submenu_page('fdci-control','Migrazione SEO .NET → .EU','Migrazione SEO .NET → .EU','manage_options','fdci-seo-migration','fdci_seo_migration_page');} add_action('admin_menu','fdci_seo_migration_menu',40); function fdci_seo_migration_page(){fdci_ops_nav();if(isset($_POST['fdci_map_save'])&&check_admin_referer('fdci_map_save')){update_option('fdci_redirect_map',sanitize_textarea_field(wp_unslash($_POST['fdci_redirect_map']??'')),false);echo'

Mappa salvata.

';}$map=get_option('fdci_redirect_map',"# Un URL per riga: VECCHIO_URL | NUOVO_URL | NOTE\n");echo'

Migrazione SEO .NET → .EU

Archivio operativo per preparare i redirect permanenti pagina-per-pagina. Non attiva redirect sul vecchio dominio: genera la mappa che useremo al momento del passaggio.

';wp_nonce_field('fdci_map_save');echo'

Regola: evitare redirect massivi alla Home; ogni vecchio contenuto va alla destinazione nuova più pertinente.

';} https://www.festivaldelcinemaitaliano.eu/tag/featured/