WordPressでブログを書くときに、すぐには公開しないけど、とりあえず記事をつくりこんでおいてネタとしてとっておいて、後で公開したいことってありますよね?
で、いい感じにまとまってきたし、「下書きとして保存」で下書き完成……というときに「手が滑った!!」となって「公開」を押してしまって記事が公開され、各所に通知が飛んでいってしまって後悔したこと、ありませんか?
今日も実は昼休み中にブログの記事を作っていたのですが、うっかり手が滑って公開を押してしまいあわわーとなってしまったので、とりあえず対策を考えてみることにしました。
15行で投稿の誤爆を防止する方法
functions.php にこんな感じに書くと、「公開」を押した時にダイアログが出てきて、本当に公開していいかの最終確認のステップを挟むことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function pre_post_dialog (){ echo <<< EOF <script> jQuery(document).ready(function($) { $('#publish').click(function() { if(!confirm('本当に記事を公開していいのかな?かな??')) { return false; } }); }); </script> EOF; }; add_action('admin_head-post.php','pre_post_dialog'); add_action('admin_head-post-new.php','pre_post_dialog'); |
簡単に解説
JS部分は以前書いた、jQueryでダイアログ出す方法そのまんまです。
フックするのは、記事の編集画面ですので、post-new.php(新規作成用)と、post.php(編集用)です。
この2つのページのヘッダー部分にスクリプトをかませるには、admin_head の hook_suffix というものを利用します。
admin_head は、管理画面のヘッダーで実行されるやつですね。全ページ共通でなにかしたいときに利用するやつです。
で、WordPressは、この admin_head を実行する前に、 admin_head-$hook_suffix を実行しているんだそうです。
1 2 3 |
do_action('admin_print_scripts'); do_action("admin_head-$hook_suffix"); do_action('admin_head'); |
admin-header.php in trunk/src/wp-admin – WordPress Trac
hook_suffix については、こちらの記事が参考になりました。
ということで、このhook_suffixを用いると、管理画面の特定のページでのみ動作する admin_head のフックを作ることができるようになりますので、新規投稿と投稿編集画面以外ではそもそもこのスクリプトが読まれず、思わぬところでダイアログが誤爆してしまうのを防げますね。
おまけ
最初作った時は、実はアクションを post-new.php だけにしかかけていませんでした。
しかし今度は自分で作ってローカルでちゃんとダイアログ出ることも確認したためか、「投稿画面なら絶対公開ボタン押せばダイアログが出る」って気になってて下書きの修正中にダイアログのキャプチャを撮ろうと思い躊躇わずに公開を押して「ダイアログでねぇえ!あああ…公開されてゆく書きかけの記事…」ってな感じで2回めの誤爆をかましたところで書きかけから修正することもあるんだから、post-new.php だけじゃなくて post.php にも入れないとダメだよね!ってことに気づいて、あわてて修正したのでありました。
これで少しでも誤爆が減ればいいなぁ。主に自分の。
コメントする