Changeset 50169
- Timestamp:
- 02/02/2021 09:04:58 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/taxonomy.php
r50120 r50169 3892 3892 } 3893 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3894 3906 foreach ( (array) $terms as $term ) { 3895 3907 $count = 0; … … 3897 3909 // Attachments can be 'inherit' status, we need to base count off the parent's status if so. 3898 3910 if ( $check_attachments ) { 3899 $count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts p1 WHERE p1.ID = $wpdb->term_relationships.object_id AND ( post_status = 'publish' OR ( post_status = 'inherit' AND post_parent > 0 AND ( SELECT post_status FROM $wpdb->posts WHERE ID = p1.post_parent ) = 'publish' ) ) AND post_type = 'attachment' AND term_taxonomy_id = %d", $term ) ); 3911 // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedDynamicPlaceholderGeneration 3912 $count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts p1 WHERE p1.ID = $wpdb->term_relationships.object_id AND ( post_status IN ('" . implode( "', '", $post_statuses ) . "') OR ( post_status = 'inherit' AND post_parent > 0 AND ( SELECT post_status FROM $wpdb->posts WHERE ID = p1.post_parent ) IN ('" . implode( "', '", $post_statuses ) . "') ) ) AND post_type = 'attachment' AND term_taxonomy_id = %d", $term ) ); 3900 3913 } 3901 3914 3902 3915 if ( $object_types ) { 3903 3916 // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedDynamicPlaceholderGeneration 3904 $count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = 'publish'AND post_type IN ('" . implode( "', '", $object_types ) . "') AND term_taxonomy_id = %d", $term ) );3917 $count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status AND post_type IN ('" . implode( "', '", $object_types ) . "') AND term_taxonomy_id = %d", $term ) ); 3905 3918 } 3906 3919 -
trunk/tests/phpunit/tests/term/termCounts.php
r49603 r50169 225 225 } 226 226 227 /** 228 * Term counts incremented correctly for posts with attachment. 229 * 230 * @covers ::wp_update_term_count 231 * @dataProvider data_term_count_changes_for_post_statuses_with_attachments 227 function add_custom_status_to_counted_statuses( $statuses ) { 228 array_push( $statuses, 'custom' ); 229 return $statuses; 230 } 231 232 /** 233 * Term counts incremented correctly when the `update_post_term_count_statuses` filter is used. 234 * 235 * @covers ::wp_update_term_count 236 * @dataProvider data_term_count_changes_for_update_post_term_count_statuses_filter 237 * @ticket 38843 232 238 * 233 239 * @param string $post_status New post status. 234 240 * @param int $change Expected change. 235 241 */ 236 public function test_term_count_changes_for_ post_statuses_with_attachments( $post_status, $change ) {242 public function test_term_count_changes_for_( $post_status, $change ) { 237 243 $term_count = get_term( self::$attachment_term )->count; 238 // Do not use shared fixture for this test as it relies on a new post. 244 245 add_filter( 'update_post_term_count_statuses', array( $this, 'add_custom_status_to_counted_statuses' ) ); 246 239 247 $post_id = $this->factory()->post->create( array( 'post_status' => $post_status ) ); 240 248 wp_add_object_terms( $post_id, self::$attachment_term, 'wp_test_tax_counts' ); … … 250 258 $expected = $term_count + $change; 251 259 $this->assertSame( $expected, get_term( self::$attachment_term )->count ); 252 } 253 254 /** 255 * Data provider for test_term_count_changes_for_post_statuses_with_attachments. 260 261 remove_filter( 'update_post_term_count_statuses', array( $this, 'add_custom_status_to_counted_statuses' ) ); 262 } 263 264 /** 265 * Data provider for test_term_count_changes_for_update_post_term_count_statuses_filter. 256 266 * 257 267 * @return array[] { … … 260 270 * } 261 271 */ 262 function data_term_count_changes_for_ post_statuses_with_attachments() {272 function data_term_count_changes_for_() { 263 273 return array( 264 274 // 0. Published post … … 270 280 // 3. Private post 271 281 array( 'private', 0 ), 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 272 332 ); 273 333 }
Note: See TracChangeset
for help on using the changeset viewer.