6

Ich muss etwas Code ausführen, sobald neue Bilder in WordPress 3.5 hochgeladen werden. Hier ist der Code von wp-includes/js/Medien-views.js (Zeile 529-540)Wie man etwas Code laufen lässt, sobald ein neues Bild in WordPress 3.5 geladen wird.

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); 
    }, 

Ich habe alert ('neues Bild hochgeladen!') Am Ende der Upload-Funktion und die Browser Alert 'Neues Bild hochgeladen!' wenn ein neues Bild hochgeladen wurde. Allerdings möchte ich nicht den Kern von WordPress hacken, also frage ich mich, ob es einen Weg gibt, wie ich Code in mein Thema schreiben kann, der das Gleiche tun kann? Entschuldigung für mein Englisch. Vielen Dank für Sie, Leute!

+0

Sie haben vielleicht mehr Glück auf http://wordpress.stackexchange.com/ –

Antwort

8

This line ofwp-plupload.js zeigt, dass die Uploader-Warteschlange auf vollständige zurückgesetzt. So können Sie dies tun:

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

Ich habe es getestet und es funktioniert auf WP 3,5 Seiten.

So, hier ist die Vollversion einschließlich der Unterstützung sowohl für den regulären Uploader auf "hochladen New Media" Seite und die neuen plupload Uploader auf "Medien einfügen" Dialog.

Erstellen Sie eine JavaScript-Datei namens: wp-admin-extender.js und es unter /custom/js/ Ordner oder was auch immer in Ihrem Vorlagenverzeichnis speichern.

// 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!'); 
    }); 
} 

Und schließlich; Füge dies in functions.php Ihr ​​Thema ist diese Funktionalität in WP Admin zu erhalten:

//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'); 

Dies ist nicht die legitime Lösung sein könnte, aber es ist zumindest eine Abhilfe.

+0

Schön. Ich bin mir nicht sicher, ob das Zurücksetzen das richtige Ereignis ist, Sie könnten versuchen, on ('all', function (e) {console.log (e)}) 'zu sehen, was am besten für jede Situation funktioniert. Diese Problemumgehung ist für ALLE auf der Seite, ich suchte nach einem benutzerdefinierten 'wp.media' Uploader, aber das könnte tatsächlich funktionieren, indem ich das ein- und ausschalten bei 'wp.media''s Öffnen und Schließen Events. – NoBugs

+0

'on ('all', fuction() {...})' wird ausgelöst, wenn ein Anhang/eine Datei zum Hochladen ausgewählt/hinzugefügt wird. Also 'Reset' ist der beste Weg zu gehen, glaube ich. Und es funktioniert. Der Punkt ist, dass die Warteschlange nur zurückgesetzt wird, wenn der Upload abgeschlossen ist. –

+0

Danke für die Hilfe - um zu verdeutlichen, wenn ich sagte, dass dies für alle auf der Seite ist, meinte ich, dass Ihr Code für jeden Uploader auf der Seite ausgelöst werden sollte. Was, wenn wir das nur mit einem benutzerdefinierten 'wp.media'-Fenster machen wollen? – NoBugs

-1

In Javascript, das helfen kann:

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

Es gibt auch eine Aktion in der PHP-Code sein kann, die funktionieren könnte, bemerkte ich es echo apply_filters("async_upload_{$type}", $id); am Ende async-upload .php.

+0

Danke dafür.Aber es läuft jedes Mal, wenn Sie die Medienbibliothek öffnen, nicht gleich nach dem Hochladen eines neuen Bildes. – Alvin

-1

Vielleicht könnten Sie in die Aktion add_attachement einsteigen?

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

Wie würden Sie in dieser Aktion Javascript an den Browser senden? – NoBugs

+0

Ich habe meine Antwort oben bearbeitet, um es Ihnen zu zeigen. – billerby

+0

Code unterbricht den Upload-Vorgang: *** 'Beim Upload ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut. *** – brasofilo

0

Antwort von Onur Yıldırım schlägt vor, den Abschluss aller Uploads zu haken. Aber nach Ihrer Frage müssen Sie bei jedem erfolgreichen Upload haken. Was Sie tun können, indem Sie wp.Uploader.prototype erweitern. Für richtige Anweisungen für jQuery folgen Sie dem Link zu stackexchange: https://wordpress.stackexchange.com/a/131295

Ich habe getestet, es ermöglicht Ihnen wirklich, um "Erfolg" Antwort (und andere, einschließlich Init, Fehler, hinzugefügt, Fortschritt, abgeschlossen), die symbolisiert Das plupload "FileUploaded" selbst ausgelöst Ereignis für jede Datei einzeln, die async-upload.php JSON-String.

Verwandte Themen