Changeset 56712
- Timestamp:
- 09/26/2023 03:03:19 PM (17 months ago)
- Location:
- trunk/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/js/_enqueues/admin/inline-edit-post.js
r56022 r56712 179 179 setBulk : function(){ 180 180 var te = '', type = this.type, c = true; 181 var checkedPosts = $( 'tbody th.check-column input[type="checkbox"]:checked' ); 182 var categories = {}; 183 var indeterminatePostCategoryField = $( '<input type="hidden" name="indeterminate_post_category[]">' ); 181 184 this.revert(); 182 185 … … 217 220 // Populate the list of items to bulk edit. 218 221 $( '#bulk-titles' ).html( '<ul id="bulk-titles-list" role="list">' + te + '</ul>' ); 222 223 // Gather up some statistics on which of these checked posts are in which categories. 224 checkedPosts.each( function() { 225 var id = $( this ).val(); 226 var checked = $( '#category_' + id ).text().split( ',' ); 227 228 checked.map( function( cid ) { 229 categories[ cid ] || ( categories[ cid ] = 0 ); 230 // Just record that this category is checked. 231 categories[ cid ]++; 232 } ); 233 } ); 234 235 // Compute initial states. 236 $( '.inline-edit-categories input[name="post_category[]"]' ).each( function() { 237 // Clear indeterminate states. 238 $( '<input type="hidden" name="indeterminate_post_category[]">' ).remove(); 239 240 if ( categories[ $( this ).val() ] == checkedPosts.length ) { 241 // If the number of checked categories matches the number of selected posts, then all posts are in this category. 242 $( this ).prop( 'checked', true ); 243 } else if ( categories[ $( this ).val() ] > 0 ) { 244 // If the number is less than the number of selected posts, then it's indeterminate. 245 $( this ).prop( 'indeterminate', true ); 246 247 // Set indeterminate states for the backend. 248 indeterminatePostCategoryField.val( $( this ).val() ); 249 $( this ).after( indeterminatePostCategoryField ); 250 } 251 } ); 252 253 $( '.inline-edit-categories input[name="post_category[]"]' ).on( 'change', function() { 254 // Remove the indeterminate flags as there was a specific state change. 255 $( this ).parent().find( 'input[name="indeterminate_post_category[]"]' ).remove(); 256 } ); 257 258 $( '.inline-edit-save button' ).on( 'click', function() { 259 $( '.inline-edit-categories input[name="post_category[]"]' ).prop( 'indeterminate', false ); 260 } ); 219 261 220 262 /** -
trunk/src/wp-admin/css/list-tables.css
r56665 r56712 1148 1148 } 1149 1149 1150 ul.cat-checklist input[name="post_category[]"]:indeterminate::before { 1151 content: ''; 1152 border-top: 2px solid grey; 1153 width: 65%; 1154 height: 2px; 1155 position: absolute; 1156 top: calc( 50% + 1px ); 1157 left: 50%; 1158 transform: translate( -50%, -50% ); 1159 } 1160 1150 1161 #bulk-titles .ntdelbutton, 1151 1162 #bulk-titles .ntdeltitle, -
trunk/src/wp-admin/includes/post.php
r56587 r56712 642 642 643 643 if ( isset( $new_cats ) && in_array( 'category', $tax_names, true ) ) { 644 $cats = (array) wp_get_post_categories( $post_id ); 645 $post_data['post_category'] = array_unique( array_merge( $cats, $new_cats ) ); 644 $cats = (array) wp_get_post_categories( $post_id ); 645 646 if ( 647 isset( $post_data['indeterminate_post_category'] ) 648 && is_array( $post_data['indeterminate_post_category'] ) 649 ) { 650 $indeterminate_post_category = $post_data['indeterminate_post_category']; 651 } else { 652 $indeterminate_post_category = array(); 653 } 654 655 $indeterminate_cats = array_intersect( $cats, $indeterminate_post_category ); 656 $determinate_cats = array_diff( $new_cats, $indeterminate_post_category ); 657 $post_data['post_category'] = array_unique( array_merge( $indeterminate_cats, $determinate_cats ) ); 658 646 659 unset( $post_data['tax_input']['category'] ); 647 660 }
Note: See TracChangeset
for help on using the changeset viewer.