Codice per caricamento allegati personalizzato. Ci siamo quasi!
Il codice seguente si trova nel functions.php del mio tema e crea un'icona di caricamento personalizzata sopra l'editor di contenuti di WordPress, accanto all'icona di caricamento predefinita.
Le immagini caricate tramite questa icona ricevono un flag speciale in wp_postmeta chiamato _imageTop per differenziarle dalle immagini allegate standard (per consentirmi di fare operazioni speciali su di esse come una raccolta separata di immagini "allegate").
Ho 3 problemi che si verificano e sono sicuro siano facili da risolvere.
1) Il filtro attachment_fields_to_save non viene applicato, anche se posso vedere il testo echo all'interno della finestra media-upload.php. Lo so perché il meta _imageTop viene scritto nel database solo quando commento il controllo if(isset)
2) Dopo che le immagini sono state caricate, devo cliccare su "Salva tutte le modifiche" per far sì che il meta _imageTop venga salvato nel database. Idealmente, vorrei che i dati venissero salvati immediatamente dopo il caricamento, senza dover cliccare "Salva tutte le modifiche". Questo probabilmente è dovuto al fatto che il gestore attachment_fields_to_save viene eseguito solo sull'hook "Salva tutte le modifiche". Tuttavia, vorrei capire come farlo eseguire quando le immagini sono state caricate.
3) Voglio rimuovere il link "inserisci nel post" dalla schermata.
//Carica immagini personalizzate
function my_customImages($initcontext)
{
global $post;
?>
<script type="text/javascript">
jQuery(document).ready(function() {
var fileInput = '';
jQuery('#wpe-uploadAttachments').click(function() {
fileInput = jQuery(this).prev('input');
formfield = jQuery('#upload_image').attr('name');
post_id = jQuery('#post_ID').val();
tb_show('Immagini del mio Prodotto', 'media-upload.php?post_id='+post_id+'&type=image&my_idCustomAttachment=true&TB_iframe=true');
return false;
});
});
</script>
<?php
return $initcontext. '<input type="hidden" id="post_ID" value="'. $post->ID .'" /> Immagini Prodotto:<a id="wpe-uploadAttachments" href="javascript:;" class="mceButton mceButtonEnabled" onmousedown="return false;" onclick="return false;" title="Clicca qui per caricare le immagini prodotto per questo post"><img src="'.get_bloginfo('template_directory') .'/img/upload-icon.gif"" alt="Icona caricamento immagini prodotto" title="Carica immagini prodotto" /></a>';
}
add_filter('media_buttons_context', 'my_customImages');
function my_image_attachment_fields_to_save($post, $attachment) {
update_post_meta($post['ID'], '_imageTop', true);
return $post;
}
if(isset($_GET['my_idCustomAttachment'])){
echo "Questo è vero";
add_filter("attachment_fields_to_save", "my_image_attachment_fields_to_save", null , 2);
}

1) Il filtro attachment_fields_to_save non viene applicato, anche se posso vedere il testo echo all'interno della finestra media-upload.php. Lo so perché il meta _imageTop viene scritto nel database solo quando commento il controllo if(isset)
Prova a sostituire $_GET con $_POST e verifica se funziona. Se sì, devi controllare anche $_POST.
2) Dopo che le immagini sono state caricate, devo cliccare su "Salva tutte le modifiche" per far sì che il meta _imageTop venga salvato nel database. Idealmente, vorrei che i dati vengano salvati immediatamente dopo il caricamento, senza dover cliccare su "Salva tutte le modifiche". Questo probabilmente accade perché il gestore attachment_fields_to_save viene attivato solo sull'hook "Salva tutte le modifiche". Tuttavia, vorrei capire come farlo attivare quando le immagini sono state caricate.
Se non viene attivato, l'unica cosa che puoi fare è attivarlo manualmente, ad esempio chiamando direttamente la funzione dell'hook. Se questo non è possibile (ad esempio non hai codice che viene eseguito in quel momento), devi cercare un'altra azione a cui agganciarti, ad esempio una che viene attivata dopo il caricamento. Probabilmente esiste qualche hook quando l'immagine viene salvata nella libreria multimediale. Potresti quindi salvare anche il tuo campo personalizzato nel database (!). Solo per averlo salvato. Non so se WP è in grado di gestirlo con il suo sistema di revisioni, quindi devi provare.
3) Voglio rimuovere il link "inserisci nel post" dalla schermata.
Non so come questo possa essere fatto a memoria, dovresti controllare il codice core per vedere se c'è qualcosa che puoi sovrascrivere con un hook.
