Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

管理画面でカテゴリやカスタムタクソノミにチェックが入って無かったらアラートを出す

No Comment wordpress,

とある案件で、管理画面からカスタム投稿記事を投稿する際に、カスタムタクソノミ(カスタム分類)にチェックが入って無ければアラートを出す、という機能が欲しくなった。

クライアントが投稿する時にチェックを忘れると、通常の投稿は自動的に一番上のカテゴリにチェックが入り、カスタム投稿の場合は、カスタムタクソノミが空白で投稿される。
投稿ミスで自動的にチェックを入れられると困る場合、空白だとサイト表示で困る場合が多いので、
これを防ぎたくて「管理画面のカスタム分類投稿ページ」を分岐させる方法を探して四苦八苦していたが結局なんともならず、フォーラムに投稿。
すると投稿当日にはもう解決案が投稿されてた。
有難うオープンソース、最高だwordpress。

https://gist.github.com/gatespace/11020994

回答者の方はgithubにUPしてくれてたけど、一応自サイトにもメモ。

/*
* WordPressの投稿作成画面で必須項目を作る(空欄ならJavaScriptのアラート)
*/
add_action( 'admin_head-post-new.php', 'mytheme_post_edit_required' ); // 新規投稿画面でフック
add_action( 'admin_head-post.php', 'mytheme_post_edit_required' ); // 投稿編集画面でフック
function mytheme_post_edit_required() {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
if( 'post' == $('#post_type').val() || 'page' == $('#post_type').val() ){ // post_type 判定。例は投稿と固定ページ。カスタム投稿タイプは適宜追加
$("#post").submit(function(e){ // 更新あるいは下書き保存を押したとき
if('' == $('#title').val()) { // タイトル欄の場合
alert('タイトルを入力してください!');
$('.spinner').hide(); // spinnerアイコンを隠す
$('#publish').removeClass('button-primary-disabled'); // #publishからクラス削除
$('#title').focus(); // 入力欄にフォーカス
return false;
}
if($("#taxonomy-category input:checked").length < 1 ) { // カテゴリーがチェックされているかどうか。条件を要確認。普通は設定したカテゴリーになるから要らない
alert('カテゴリーを選択してください');
$('.spinner').hide();
$('#publish').removeClass('button-primary-disabled');
$('#taxonomy-category').focus();
return false;
}
if( $("#set-post-thumbnail img").length < 1 ) { // アイキャッチ画像
alert('アイキャッチ画像を設定してください!');
$('.spinner').hide();
$('#publish').removeClass('button-primary-disabled');
$('#set-post-thumbnail').focus();
return false;
}
});
}
});
</script>
<?php
}

という事。
実際にはカスタム投稿の場合は、2か所ある#taxonomy-category となっている部分を #taxonomy-tax名 に変更して使用する。
これで投稿時カテゴリー(or カスタムタクソノミ)にチェックが入って無ければアラートが出て、チェックを入れないと投稿できなくなる。

殴り書きで文章変だけれども、自分用メモという事で。