So führen Sie Code aus, sobald ein neues Bild im WordPress 3.5-Uploader hochgeladen wird

Lesezeit: 5 Minuten

Benutzer-Avatar
Alwin

Ich muss Code ausführen, sobald neue Bilder in den WordPress 3.5-Uploader hochgeladen werden. Hier ist der Code von wp-includes/js/media-views.js (Zeile 529-540)

    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 die Warnung („Neues Bild hochgeladen!“) am Ende dieser Upload-Funktion und die Browser-Warnung „Neues Bild hochgeladen!“ hinzugefügt. wenn ein neues Bild hochgeladen wurde. Ich möchte jedoch nicht den Kern von WordPress hacken, also frage ich mich, ob es eine Möglichkeit gibt, Code in mein Thema zu schreiben, der dasselbe kann? Entschuldigung für mein Englisch. Danke für die Aufmerksamkeit Jungs!

Benutzer-Avatar
Onur Yıldırım

Diese Linie von wp-plupload.js zeigt, dass die Uploader-Warteschlange nach Abschluss zurückgesetzt wird. Sie können also Folgendes tun:

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

Ich habe es getestet und es funktioniert auf WP 3.5 Websites.

Hier ist also die Vollversion mit Unterstützung für den regulären Uploader auf “Neue Medien hochladenBuchseite und das neue Hochladen Uploader auf “Medien einlegenDialog.

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

// 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 schlussendlich; fügen Sie dies in die functions.php Ihres Themes ein, um 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 möglicherweise nicht die legitime Lösung, aber zumindest eine Problemumgehung.

  • Nett. Ich bin mir nicht sicher, ob Reset das richtige Ereignis ist, Sie könnten es versuchen on('all',function(e){console.log(e)}) um zu sehen, was für die jeweilige Situation am besten funktioniert. Diese Problemumgehung ist für ALLE auf der Seite, ich habe nach einer benutzerdefinierten Aktion gesucht wp.media Uploader, aber das kann tatsächlich funktionieren, indem Sie dies ein- und ausschalten wp.media‘s offene und geschlossene Ereignisse.

    – NoBugs

    25. Januar 2013 um 15:19 Uhr

  • on('all', fucntion(){...}) wird immer dann ausgelöst, wenn ein Anhang/eine Datei zum Hochladen ausgewählt/hinzugefügt wird. Also “Zurücksetzen” ist meiner Meinung nach der beste Weg. Und sicher funktioniert es. Der Punkt ist, dass die Warteschlange erst zurückgesetzt wird, wenn der Upload abgeschlossen ist.

    – Onur Yıldırım

    25. Januar 2013 um 15:45 Uhr


  • Danke für die Hilfe – zur Verdeutlichung, als ich sagte, dass dies für alle auf der Seite gilt, meinte ich, dass Ihr Code für jeden Uploader auf der Seite ausgelöst werden sollte. Was ist, wenn wir dies nur einem Brauch antun wollen? wp.media Fenster?

    – NoBugs

    26. Januar 2013 um 1:33 Uhr


Benutzer-Avatar
Олег

Antwort von Onur Yıldırım schlägt vor, alle Uploads abzuschließen. Aber gemäß Ihrer Frage müssen Sie sich an jeden erfolgreichen Upload anschließen. Was Sie tun können, indem Sie wp.Uploader.prototype erweitern. Für die richtige Anleitung für jQuery folgen Sie dem Link zu stackexchange: https://wordpress.stackexchange.com/a/131295

Ich habe getestet, es erlaubt Ihnen wirklich, sich an die “Success” -Antwort (und andere, einschließlich Init, Error, Added, Progress, Complete) zu hängen, was das selbstausgelöste plupload “FileUploaded”-Ereignis für jede Datei einzeln symbolisiert und das erhält async-upload.php-json-String.

In Javascript kann dies helfen:

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

Es kann auch eine Aktion im PHP-Code geben, die funktionieren könnte, mir ist aufgefallen, dass es eine gibt echo apply_filters("async_upload_{$type}", $id); am Ende von asynchroner Upload.php.

  • Dank dafür. Aber es läuft jedes Mal, wenn Sie die Medienbibliothek öffnen, nicht direkt nachdem ein neues Bild hochgeladen wurde.

    – Alwin

    12. Januar 2013 um 8:17 Uhr

Benutzer-Avatar
Billerby

Vielleicht könnten Sie sich in die Aktion add_attachement einklinken?

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

Benutzer-Avatar
Svetoslav Luchezarniy

Олег, vielen Dank für den Link https://wordpress.stackexchange.com/a/131295.

Dies ist eine großartige Lösung, die wirklich funktioniert!

So habe ich diese Lösungen für mich verwendet:

$.extend(wp.Uploader.prototype,{
    success: function(file_attachment){
        console.log(file_attachment);
        if(wp.media.frame.content.get() !== null){
            setTimeout(function(){
                wp.media.frame.content.get().collection.props.set({ignore: (+ new Date())});
            },100);
        }
    }
});

1381510cookie-checkSo führen Sie Code aus, sobald ein neues Bild im WordPress 3.5-Uploader hochgeladen wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy