【WordPress】Ctrl+Sで投稿を保存できるようにするプラグイン
問題
最近のWordPressでは、ビジュアルエディタのときならCtrl+Sで保存ができるようになっていてびっくりしたのだが、私は普段テキストエディタの方を使用しており、こちらはCtrl+Sで投稿の保存ができない。
テキストエディタでも、Ctrl+Sで投稿の保存ができるようにしたい。
答え
プラグインを使え。例えば http://wordpress.org/extend/plugins/ctrl-s/ など。
…
というのでも解決するが、中がどうなっているか知りたいので、プログラムを書く。
functions.php などに、コピー&ペーストできる形で書いてみる。
admin_print_scriptsというフックに引っ掛けて、管理画面のscriptタグを出力するところにJavaScriptを追加する。
JavaScriptで、キー押下イベントを監視して、投稿の保存の処理をする。
class My_Ctrl_S { function __construct() { // ここでは準備まで // いろいろ始めるのは、plugins_loadedの後にする(簡単な処理はここに書いても動くけど) add_action('plugins_loaded', array($this, 'plugins_loaded')); } function plugins_loaded() { // 管理画面のscriptタグを出力するところにフックを仕掛ける // デフォルトのscriptタグ類は優先度20で入っているので、それより優先度を下げた // jqueryは読み込んでおいて欲しい(admin_enqueue_scripts使えといわれそうなところだが) add_action('admin_print_scripts',array($this, 'admin_print_scripts'), 100); } // scriptタグをechoする function admin_print_scripts() { ?> <script> jQuery(function($){ //(公開前の)下書き保存か(公開済みの)更新ボタンを探す var b = $('input[type="submit"]#save-post, input[type="submit"]#publish').first(); //ボタンがあれば、キーイベントを監視する if (b.length) { $(document).on('keydown', function(e) { //Ctrl+Sがtextareaかinput要素で押されたら、保存ボタンクリック if ((e.ctrlKey || e.metaKey) && e.which == 83 && (e.target.nodeName == 'TEXTAREA' || e.target.nodeName == 'INPUT')) { b.click(); return false; } }); } }); </script> <?php } } new My_Ctrl_S();
参考
Ctrl+S したい場合以外にも、同じような方法で管理画面にJavaScriptを追加できる。
コメント