• カテゴリーの選択を1つに制限するために
    下記の記述をfunctions.phpに記述しました。

    add_action( 'admin_print_footer_scripts', 'limit_category_select' );
        function limit_category_select() {
        	?>
        	<script type="text/javascript">
        		jQuery(function($) {
        			var categorydiv = $( '#categorydiv input[type=checkbox]' );
        			categorydiv.click( function() {
        				$(this).parents( '#categorydiv' ).find( 'input[type=checkbox]' ).attr('checked', false);
        				$(this).attr( 'checked', true );
        			});
    
        			var inline_edit_col_center = $( '.inline-edit-col-center input[type=checkbox]' );
        			inline_edit_col_center.click( function() {
        				$(this).parents( '.inline-edit-col-center' ).find( 'input[type=checkbox]' ).attr( 'checked', false );
        				$(this).attr( 'checked', true );
        			});
        			
        			$( '#categorydiv #category-pop > ul > li:first-child, #categorydiv #category-all > ul > li:first-child, .inline-edit-col-center > ul.category-checklist > li:first-child' ).before( '<p style="padding-top:5px;">カテゴリーは1つしか選択できません</p>' );
    
        		});
        	</script>
        	<?php
        }

    wordpress5.8にアップデートしたところ、クラシックエディターでは制限できるのですが、ブロックエディターで編集すると、複数のカテゴリーが選択できてしまいます。

    ブロックエディターでも制限できる記述をお教えいただけませんでしょうか。

    同時に、親カテゴリーを選択できないよう下記の記述をしていましたが、

    require_once(ABSPATH . '/wp-admin/includes/template.php');
    class Danda_Category_Checklist extends Walker_Category_Checklist {
     
         function start_el( &$output, $category, $depth, $args, $id = 0 ) {
            extract($args);
            if ( empty($taxonomy) )
                $taxonomy = 'category';
     
            if ( $taxonomy == 'category' )
                $name = 'post_category';
            else
                $name = 'tax_input['.$taxonomy.']';
     
            $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
    	$cat_child = get_category_children($category->term_id);
    	if($cat_child !== "") {
                $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), true, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
            }else{
                $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
            }
        }
     
    }
     
    function lig_wp_category_terms_checklist_no_top( $args, $post_id = null ) {
        $args['checked_ontop'] = false;
        $args['walker'] = new Danda_Category_Checklist();
        return $args;
    }
    add_action( 'wp_terms_checklist_args', 'lig_wp_category_terms_checklist_no_top' );

    同様にブロックエディターでは選択できてしまいます。
    (クラシックエディターでは選択できません。)
    併せてお教えいただけませんでしょうか。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • Aki Hamano

    (@wildworks)

    @c-factory さん

    こんにちは。
    ブロックエディターでは、PHPを使ってカテゴリーの選択形式をコントロールすることが出来ません。
    JavaScriptで記述する必要があり、ハードルも高いので、既存プラグインを使用する事をお勧めします。

    調べた限りですと、「Radio Buttons for Taxonomies」というプラグインがGutenbergにも対応しており、カテゴリーの選択をチェックボックスからラジオボタンでの単一選択に変更出来るようです。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「カテゴリーの選択を1つに制限」には新たに返信することはできません。