Make WordPress Core


Ignore:
Timestamp:
10/30/2020 04:57:16 AM (6 years ago)
Author:
peterwilsoncc
Message:

Taxonomy: Revert Light-weight/partial term counts.

Partial revert of [49141], [49171], [49316].

All functional changes are removed, appropriate term counting unit tests are retained.

See #40351.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post.php

    r49328 r49451  
    40754075    }
    40764076
    4077     // Allow term counts to be handled by transitioning post type.
    4078     _wp_prevent_term_counting( true );
    40794077    if ( is_object_in_taxonomy( $post_type, 'category' ) ) {
    40804078        wp_set_post_categories( $post_ID, $post_category );
     
    41334131        }
    41344132    }
    4135     // Restore term counting.
    4136     _wp_prevent_term_counting( false );
    41374133
    41384134    if ( ! empty( $postarr['meta_input'] ) ) {
     
    44514447            continue;
    44524448        }
    4453         _wp_prevent_term_counting( true );
    44544449        wp_set_post_terms( $post->ID, array( $default_term_id ), $taxonomy );
    4455         _wp_prevent_term_counting( false );
    44564450    }
    44574451
     
    73617355 */
    73627356function _update_term_count_on_transition_post_status( $new_status, $old_status, $post ) {
    7363     if ( 'inherit' === $new_status ) {
    7364         $new_status = get_post_status( $post->post_parent );
    7365     }
    7366 
    7367     if ( 'inherit' === $old_status ) {
    7368         $old_status = get_post_status( $post->post_parent );
    7369     }
    7370 
    7371     $count_new = 'publish' === $new_status;
    7372     $count_old = 'publish' === $old_status;
    7373 
    7374     if ( $count_new === $count_old ) {
    7375         // Nothing to do.
    7376         return;
    7377     }
    7378 
    7379     /*
    7380      * Update counts for the post's terms.
    7381      *
    7382      * Term counting is deferred while incrementing/decrementing the counts to
    7383      * reduce the number of database queries required. Once the counts are
    7384      * complete the updates are performed if term counting wasn't previously
    7385      * deferred.
    7386      */
    7387     $previous_deferred_setting = wp_defer_term_counting();
    7388     wp_defer_term_counting( true );
     7357    // Update counts for the post's terms.
    73897358    foreach ( (array) get_object_taxonomies( $post->post_type ) as $taxonomy ) {
    73907359        $tt_ids = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'tt_ids' ) );
    7391 
    7392         if ( empty( $tt_ids ) ) {
    7393             // No terms for this taxonomy on object.
    7394             continue;
    7395         }
    7396 
    7397         $object_types = (array) get_taxonomy( $taxonomy )->object_type;
    7398 
    7399         foreach ( $object_types as &$object_type ) {
    7400             list( $object_type ) = explode( ':', $object_type );
    7401         }
    7402 
    7403         $object_types = array_unique( $object_types );
    7404 
    7405         if ( ! in_array( $post->post_type, $object_types, true ) ) {
    7406             $modify_by = 0;
    7407         } elseif ( $count_new && ! $count_old ) {
    7408             $modify_by = 1;
    7409         } elseif ( $count_old && ! $count_new ) {
    7410             $modify_by = -1;
    7411         }
    7412 
    7413         if ( 'attachment' === $post->post_type ) {
    7414             wp_modify_term_count_by( $tt_ids, $taxonomy, $modify_by );
    7415             continue;
    7416         }
    7417 
    7418         $check_attachments = array_search( 'attachment', $object_types, true );
    7419         if ( false !== $check_attachments ) {
    7420             unset( $object_types[ $check_attachments ] );
    7421             $check_attachments = true;
    7422         }
    7423 
    7424         wp_modify_term_count_by( $tt_ids, $taxonomy, $modify_by );
    7425         if ( ! $check_attachments ) {
    7426             continue;
    7427         }
    7428 
    7429         /*
    7430          * For non-attachments, check if there are any attachment children
    7431          * with 'inherited' post status -- if so those will need to be counted.
    7432          */
    7433         $attachments = get_children(
    7434             array(
    7435                 'post_parent'            => $post->ID,
    7436                 'post_status'            => 'inherit',
    7437                 'post_type'              => 'attachment',
    7438                 'update_post_meta_cache' => false,
    7439                 'update_post_term_cache' => true,
    7440             )
    7441         );
    7442 
    7443         foreach ( $attachments as $attachment ) {
    7444             _update_term_count_on_transition_post_status( $new_status, $old_status, $attachment );
    7445         }
    7446     }
    7447     wp_defer_term_counting( $previous_deferred_setting );
     7360        wp_update_term_count( $tt_ids, $taxonomy );
     7361    }
    74487362}
    74497363
Note: See TracChangeset for help on using the changeset viewer.