サポート » 使い方全般 » カテゴリ未選択/複数選択した場合にアラート

  • 管理画面の記事編集で
    カテゴリを未選択/親カテゴリを複数選択
    して投稿をクリックした場合に
    警告
    (カテゴリが選択されていません/2つ以上の親カテゴリは選択できません)
    などを出すことは可能でしょうか。

    できれば同じようにアイキャッチ画像やカスタムフィールドなどにも応用できる方法を教えていただけると助かります。
    function.phpを弄る方法でも、プラグインでも構わないです。

    どなたかご教授ください。
    よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 大分時間が経ってますがアクションフックを使う方法で書いてみました。
    テーマのfunctions.phpに記述して使います。

    if ( !has_action( 'admin_footer', 'alert_category' ) ){
    	add_action( 'admin_footer' , 'alert_category' );
    }
    function alert_category() {
    echo <<< EOF
    <script type="text/javascript">	
    
    	jQuery("#post").attr("onsubmit", "return check_category();");
    
    	function check_category(){
    		var check_num = jQuery("#categorychecklist input:checked").length;
    		if(check_num <= 0){
    			alert("注意: カテゴリが選択されていません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else if(check_num >= 2){
    			alert("注意: 2つ以上の親カテゴリは選択できません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else{
    			return true;
    		}
    	}
    
    </script>';
    EOF;
    }

    jQueryでsubmitを無効化し、代わりに関数を呼び出す方式に変えています。
    カスタムフィールドでは同様の方法でフィールドに値が入っているか確認すれば良いので応用が利きそうですが、アイキャッチ画像はそのままだと難しいかもしれません。

    トピック投稿者 takuya1108

    (@takuya1108)

    t.okuboさん >>
    ご返信ありがとうございます。非常に助かります。

    しかしながら、親カテゴリ/子カテゴリを1つずつ選択した場合にはアラートを出したくないのですが、このフックでは以上の選択でもアラートが出現します。
    (アラートを出したいのはカテゴリを未選択/親カテゴリを複数選択の2パターンのみです)

    この点に関しては指定することは可能なのでしょうか。

    check_category()をこんな感じで変えてみました。

    if ( !has_action( 'admin_footer', 'alert_category' ) ){
    	add_action( 'admin_footer' , 'alert_category' );
    }
    function alert_category() {
    echo <<< EOF
    <script type="text/javascript">	
    
    	jQuery("#post").attr("onsubmit", "return check_category();");
    
    	function check_category(){
    		var total_check_num = jQuery("#categorychecklist input:checked").length;
    		var child_check_num = jQuery(".children input:checked").length;
    		var parent_check_num = total_check_num - child_check_num;
    
    		if(parent_check_num <= 0){
    			alert("注意: 親カテゴリが一つも選択されていません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else if(parent_check_num >= 2){
    			alert("注意: 2つ以上の親カテゴリは選択できません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else{
    			return true;
    		}
    	}
    </script>
    EOF;
    }

    チェック判定の考え方は単純で、

    親カテゴリの数 = 全カテゴリの数 – 子カテゴリの数

    と考え、jQueryでチェックボックスの状態を取得し、親カテゴリのチェック数で判定を行っています。

    ただ、親カテゴリにチェックを付けずに子カテゴリだけにチェックを付けた状態だと上記の判定をすり抜けるので、この問題もなんとかした方が良さそうですが、WordPressではなく完全にjQueryのセレクタ指定の問題なので、気になる場合はjQueryクックブック等を参考に勉強してみて下さい。

    追記:
    と思ったら普通に大丈夫みたいですね^^;

    トピック投稿者 takuya1108

    (@takuya1108)

    お返事が遅くなりましたが、ありがとうございました。
    JQueryもう少し勉強してみます。

    追記:

    if ( !has_action( 'admin_footer', 'alert_category' ) ){
    	add_action( 'admin_footer' , 'alert_category' );
    }
    function alert_category() {
    echo <<< EOF
    <script type="text/javascript">	
    
    	jQuery("#post").attr("onsubmit", "return check_category();");
    
    	function check_category(){
    		var total_check_num = jQuery("#categorychecklist input:checked").length;
    		var child_check_num = jQuery(".children input:checked").length;
    		var parent_check_num = total_check_num - child_check_num;
    
    		if(parent_check_num <= 0){
    			alert("注意: 親カテゴリが選択されていません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else if(parent_check_num <= 0){
    			alert("注意: 子カテゴリが選択されていません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else if(parent_check_num >= 2){
    			alert("注意: 2つ以上の親カテゴリは選択できません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else if(child_check_num >= 2){
    			alert("注意: 2つ以上の子カテゴリは選択できません。");
    			jQuery("#ajax-loading").css("visibility","hidden");
    			jQuery("#publish").removeClass("button-primary-disabled");
    			return false;
    		}else{
    			return true;
    		}
    	}
    </script>
    EOF;
    }

    以上のように記述することで、子カテゴリも指定できますね。
    ただ、このままだとカテゴリ指定で投稿後、記事投稿画面で設定済みのカテゴリーを先頭に表示するというWordpressの仕様があるため、投稿できなくなるというトラップがありますが、Category Checklist Treeというプラグインでカテゴリの順番を固定することで解決しました。

    以上、報告です。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カテゴリ未選択/複数選択した場合にアラート」には新たに返信することはできません。