Ogni allegato importato conserva l’URL sorgente in un metadato. Gli errori restano nel registro per un recupero manuale.
';
echo'
Pagine sorgente
';foreach(fdci_wix_sources() as $u)echo'
'.esc_html($u).'
';echo'
';
}
/* ===== 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.
Regola: evitare redirect massivi alla Home; ogni vecchio contenuto va alla destinazione nuova più pertinente.