7

在 WordPress 3.5 上传器中上传新图像后,我需要立即运行一些代码。这是 wp-includes/js/media-views.js 的代码(第 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 );
    },

我在这个上传功能的底部添加了alert('New image upload!'),浏览器警告'New image upload!' 上传新图像时。但是我不想破解 WordPress 的核心,所以我想知道是否有一种方法可以在我的主题中编写一些代码来做同样的事情?对不起我的英语不好。谢谢小伙伴们的关注!

4

5 回答 5

11

这行 wp-plupload.js显示上传者队列将在完成时重置。所以你可以这样做:

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

我已经对其进行了测试,它适用于 WP 3.5网站。

因此,这里是完整版,包括对“上传新媒体页面上的常规上传器和“插入媒体对话框上的新plupload上传器的支持。

创建一个名为:的 javascript 文件wp-admin-extender.js并将其保存在您的/custom/js/文件夹或模板目录中的任何内容下。

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

最后;将此添加到主题的 functions.php 以在 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');

这可能不是合法的解决方案,但至少是一种解决方法。

于 2013-01-25T05:09:48.517 回答
0

Onur Yıldırım 的回答是建议连接到所有上传的完成。但是根据您的问题,您需要挂钩每个成功的上传。您可以通过扩展 wp.Uploader.prototype 来做到这一点。有关 jQuery 的正确说明,请点击 stackexchange 的链接:https ://wordpress.stackexchange.com/a/131295

我已经测试过,它确实可以让你挂钩到“成功”响应(以及其他,包括初始化、错误、添加、进度、完成),这象征着每个文件单独的 plupload“FileUploaded”自触发事件,得到async-upload.php json 字符串。

于 2015-12-17T15:31:14.183 回答
-1

在 Javascript 中,这可能会有所帮助:

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

php代码中可能还有一个可以工作的动作,我注意到async-upload .phpecho apply_filters("async_upload_{$type}", $id);的末尾有。

于 2013-01-12T06:35:53.590 回答
-1

也许您可以加入 add_attachment 操作?

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');
于 2013-01-24T07:54:43.333 回答
-1

Олег,非常感谢链接https://wordpress.stackexchange.com/a/131295

这是一个非常有效的解决方案!

这就是我为自己使用此解决方案的方式:

$.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);
        }
    }
});
于 2021-06-10T11:53:20.193 回答