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
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;
}