6

WordPress 3.5アップローダーで新しい画像がアップロードされるとすぐにコードを実行する必要があります。ここでのwp-含まれて/のJS /メディアviews.js(ライン529から540)のコード新しい画像が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); 
    }, 

私は、このアップロード機能の下部にある(「新しい画像がアップロード!」)アラートを添加し、ブラウザのアラート「新しい画像がアップロードされました!」新しい画像がアップロードされたとき。しかし、私はWordPressのコアをハックしたくないので、私は同じことをすることができる私のテーマでいくつかのコードを書くことができる方法があるのだろうか?私の英語には申し訳ありません。あなたの注目人たちありがとう!

+0

http://wordpress.stackexchange.com/ –

答えて

8

This line ofの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!'); 
    }); 
} 

最後に、 WP Adminでこの機能を得るためにあなたのテーマののfunctions.phpにこれを追加します。

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

これは合法的な解決策ではないかもしれませんが、それは少なくとも、回避策です。

+0

ニース。リセットが正しいかどうかわからないので、それぞれの状況に適したものを見るために 'on( 'all'、function(e){console.log(e)})'を試してみてください。この回避策はページ上のALLのためのもので、カスタムの 'wp.media'アップローダにアクションを追加しようとしていましたが、これは' wp.media'のオープンイベントとクローズイベントでこれをオンとオフにして実際に動作します。 – NoBugs

+0

'on( 'all'、fucntion(){...})'はアップロードのために添付ファイル/ファイルが選択/追加されるたびに起動されます。だから、「リセット」は私が信じる最善の方法です。そして、それが動作することを確認します。要点は、アップロードが完了したときにだけキューがリセットされることです。 –

+0

助けてくれてありがとうございます - 明確にするために、私はこれがページ上にあると言ったとき、私はあなたのコードがページ上のすべてのアップローダーに対して起動されるべきだということを意味しました。これを1つのカスタム 'wp.media'ウィンドウにだけしたいのですが? – NoBugs

-1

JavaScriptでは、これが役立つことがあります。

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

も仕事ができるPHPコード内のアクションがあるかもしれませんが、私はasync-uploadの.phpの終わりにecho apply_filters("async_upload_{$type}", $id);があります気づきました。

+0

にお越しいただき、ありがとうございます。しかし、新しい画像がアップロードされた直後ではなく、メディアライブラリを開くたびに実行されます。 – Alvin

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

このアクションでブラウザにJavascriptをどのように送信しますか? – NoBugs

+0

私はあなたのことを示すために私の答えを編集しました。 – billerby

+0

コードがアップロードプロセスを壊しています:*** 'アップロード中にエラーが発生しました。後でもう一度試してください。 '*** – brasofilo

0

Answer by OnurYıldırımは、すべてのアップロードの完了を知らせることを提案しています。 あなたの質問によると、アップロードに成功するたびにフックする必要があります。 wp.​​Uploader.prototypeを拡張することで可能なこと。 https://wordpress.stackexchange.com/a/131295

私はテストしましたが、実際には "成功"応答(およびinit、error、added、progress、completeなどのその他の応答)にフックすることができます。 async-upload.php json文字列を取得して、ファイルごとに個別に「FileUploaded」という自己起動イベントをプルアップします。

関連する問題