2013-01-11 11 views
6

Ho bisogno di eseguire del codice non appena le nuove immagini vengono caricate nell'uploader di WordPress 3.5. Ecco il codice di wp-includes/js/media-views.js (linea 529-540)Come eseguire un codice non appena la nuova immagine viene caricata nell'uploader di WordPress 3.5

uploading: function(attachment) { 
     var content = this.frame.content; 

     // If the uploader was selected, navigate to the browser. 
     if ('upload' === content.mode()) 
      this.frame.content.mode('browse'); 

     // If we're in a workflow that supports multiple attachments, 
     // automatically select any uploading attachments. 
     if (this.get('multiple')) 
      this.get('selection').add(attachment); 
    }, 

ho aggiunto alert ('Nuova immagine caricato!') Nella parte inferiore di questa funzione di caricamento, e la avviso del browser 'Nuova immagine caricata!' quando è stata caricata una nuova immagine. Comunque non voglio hackerare il nucleo di WordPress, quindi mi chiedo se c'è un modo in cui posso scrivere del codice nel mio tema che possa fare la stessa cosa? Mi scusi per il mio inglese. Grazie per voi attenzione ragazzi!

+0

Si potrebbe avere migliore fortuna su http://wordpress.stackexchange.com/ –

risposta

8

This line ofwp-plupload.js mostra che la coda di caricamento si azzera sul completo. Così si può fare questo:

wp.Uploader.queue.on('reset', function() { 
    alert('Upload Complete!'); 
}); 

ho testato e funziona su WP 3.5 siti.

Quindi, ecco la versione completa incluso il supporto sia per l'uploader regolare su "Carica New Media" Pagina e il nuovo uploader plupload su "Insert media" Dialog.

Creare un file JavaScript denominato: wp-admin-extender.js e salvarlo nella cartella di /custom/js/ o qualsiasi altra cosa all'interno della vostra directory dei modelli.

// Hack for "Upload New Media" Page (old uploader) 

// Overriding the uploadSuccess function: 
if (typeof uploadSuccess !== 'undefined') { 
    // First backup the function into a new variable. 
    var uploadSuccess_original = uploadSuccess; 
    // The original uploadSuccess function with has two arguments: fileObj, serverData 
    // So we globally declare and override the function with two arguments (argument names shouldn't matter) 
    uploadSuccess = function(fileObj, serverData) 
    { 
     // Fire the original procedure with the same arguments 
     uploadSuccess_original(fileObj, serverData); 
     // Execute whatever you want here: 
     alert('Upload Complete!'); 
    } 
} 

// Hack for "Insert Media" Dialog (new plupload uploader) 

// Hooking on the uploader queue (on reset): 
if (typeof wp.Uploader !== 'undefined' && typeof wp.Uploader.queue !== 'undefined') { 
    wp.Uploader.queue.on('reset', function() { 
     alert('Upload Complete!'); 
    }); 
} 

E infine; aggiungere questo in functions.php del vostro tema per ottenere questa funzionalità in WP Admin:

//You can also use other techniques to add/register the script for WP Admin. 
function extend_admin_js() { 
    wp_enqueue_script('wp-admin-extender.js', get_template_directory_uri().'/custom/js/wp-admin-extender.js', array('media-upload', 'swfupload', 'plupload'), false, true); 
} 
add_action('admin_enqueue_scripts', 'extend_admin_js'); 

questo potrebbe non essere la soluzione legittima, ma è una soluzione, almeno.

+0

Bello. Non sono sicuro che il reset sia l'evento corretto, puoi provare con 'on ('all', function (e) {console.log (e)})' per vedere cosa funziona meglio per ogni situazione. Questa soluzione è per TUTTI nella pagina, stavo cercando di aggiungere azioni ad un uploader 'wp.media' personalizzato, ma questo potrebbe effettivamente funzionare, attivando e disattivando gli eventi di apertura e chiusura di' wp.media'. – NoBugs

+0

'on ('all', fucntion() {...})' verrà attivato ogni volta che un allegato/file viene selezionato/aggiunto per il caricamento. Quindi "resettare" è il modo migliore per andare, credo. E sicuramente funziona. Il punto è che la coda si resetterà solo al termine del caricamento. –

+0

Grazie per l'aiuto - per chiarire, quando ho detto questo è tutto per la pagina, intendevo dire che il tuo codice dovrebbe sparare per ogni uploader sulla pagina. E se volessimo farlo solo con una finestra 'wp.media' personalizzata? – NoBugs

-1

in JavaScript, questo può aiutare:

wp.media.view.Attachments.prototype.on('ready',function(){console.log('your code here');}); 

Ci può essere anche un'azione nel codice php che potrebbe funzionare, ho notato c'è echo apply_filters("async_upload_{$type}", $id); alla fine del async-upload .php.

+0

Grazie per quello.Ma viene eseguito ogni volta che si apre la libreria multimediale, non appena subito dopo il caricamento della nuova immagine. – Alvin

-1

Forse potresti collegarti all'azione add_attachement?

function do_my_attachment_manipulation($attachment_ID) 
{   
    $attachment = get_attached_file($attachment_ID); // Gets path to attachment 
    // Javascript alert: 
    ?> 
     <script> 
       alert('Media uploaded!'); 
     </script> 
    <?php 

} 

add_action("add_attachment", 'do_my_attachment_manipulation'); 
+0

Come spediresti Javascript al browser in questa azione? – NoBugs

+0

Ho modificato la mia risposta sopra per mostrarti. – billerby

+0

Il codice interrompe il processo di caricamento: *** 'Si è verificato un errore nel caricamento. Si prega di riprovare più tardi. *** – brasofilo

0

La risposta di Onur Yıldırım suggerisce il collegamento al completamento di tutti i caricamenti. Ma in base alla tua domanda, devi agganciare a ciascun caricamento riuscito. Che puoi fare estendendo wp.Uploader.prototype. Per le giuste istruzioni per jQuery segui il link a stackexchange: https://wordpress.stackexchange.com/a/131295

Ho provato, ti permette davvero di agganciare alla risposta "successo" (e altri, incluso init, errore, aggiunto, progresso, completo), che simboleggia il plupload "FileUploaded" evento auto-generato per ogni file individualmente, ottenendo la stringa json async-upload.php.

Problemi correlati