Make parent category not selectable when it has child categories

I’m trying to find a way of disabling the selection of the parent category within WordPress 3.5.1 (post editor screen) only when that parent category contains child categories.

My structure:

  • Category 1 (no children, allow users to post, keep selection option)
  • Galleries (parent category WITH children, remove selection option to stop users posting)
    • User 1 (child category, allow user to post, keep selection option)

A jQuery solution to disabling the section of all parent categories (regardless of having child categories or not) can be found here:

Make parent categories not selectable

3 Answers
3

I disabled the parent boxes to avoid shifting parents to the left.

add_action( 'admin_footer-post.php',     'wpse_98274_disable_top_categories_checkboxes' );
add_action( 'admin_footer-post-new.php', 'wpse_98274_disable_top_categories_checkboxes' );

/**
 * Disable parent checkboxes in Post Editor.
 */
function wpse_98274_disable_top_categories_checkboxes() {
    global $post_type;

    if ( 'post' != $post_type )
        return;
    ?>
        <script type="text/javascript">
            jQuery( "#category-all ul.children" ).each( function() {
                jQuery(this).closest( "ul" ).parent().children().children( "input" ).attr( 'disabled', 'disabled' )
            });
        </script>
    <?php
}

However, once the categories are pulled out of order for that horrid “feature” that moves them to the top of the box, the jQuery fails. I borrowed this code from a plugin.

add_filter( 'wp_terms_checklist_args', 'wpse_98274_checklist_args' );

/**
 * Remove horrid feature that places checked categories on top.
 */
function wpse_98274_checklist_args( $args ) {

    $args['checked_ontop'] = false;
    return $args;
}

Leave a Comment