7

新しい画像がWordPress3.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 );
    },

このアップロード機能の下部にアラート(「新しい画像がアップロードされました!」)を追加し、ブラウザのアラート「新しい画像がアップロードされました!」を追加しました。新しい画像がアップロードされたとき。ただし、WordPressのコアをハックしたくないので、同じことを実行できるコードをテーマに記述できる方法があるかどうか疑問に思っています。英語でごめんなさい。注目してくれてありがとう!

4

5 に答える 5

11

wp-plupload.jsのこの行は、アップローダーキューが完了するとリセットされることを示しています。だからあなたはこれを行うことができます:

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

私はそれをテストしました、そしてそれはWP3.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に追加して、WPAdminでこの機能を取得します。

//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

OnurYıldırımによる回答は、すべてのアップロードの完了にフックすることを提案しています。しかし、あなたの質問によると、アップロードが成功するたびにフックする必要があります。これは、wp.Uploader.prototypeを拡張することで実行できます。jQueryの適切な手順については、stackexchangeへのリンクをたどってください:https ://wordpress.stackexchange.com/a/131295

私がテストしたところ、実際には「成功」応答(およびinit、error、added、progress、completeを含むその他)にフックできます。これは、各ファイルのplupload「FileUploaded」自己起動イベントを個別に象徴し、 async-upload.phpjson文字列。

于 2015-12-17T15:31:14.183 に答える
-1

Javascriptでは、これが役立つ場合があります。

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

phpコードに機能するアクションがあるかもしれませんが、async-echo apply_filters("async_upload_{$type}", $id); upload.phpの最後にあることに気づきました。

于 2013-01-12T06:35:53.590 に答える
-1

たぶん、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');
于 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 に答える