WordPress.org

Make WordPress Core

Ticket #5377: defer-taxonomy-counts-r6340.patch

File defer-taxonomy-counts-r6340.patch, 1.8 KB (added by tellyworth, 12 years ago)
  • wordpress/wp-includes/taxonomy.php

     
    13181318        return array('term_id' => $term_id, 'term_taxonomy_id' => $tt_id);
    13191319}
    13201320
     1321// enable or disable term count deferring
     1322// if no value is supplied, the current value of the defer setting is returned
     1323function wp_defer_term_counting($defer=NULL) {
     1324        static $_defer = false;
     1325       
     1326        if ( is_bool($defer) ) {
     1327                $_defer = $defer;
     1328                // flush any deferred counts
     1329                if ( !$defer )
     1330                        wp_update_term_count( NULL, NULL, true );
     1331        }
     1332       
     1333        return $_defer;
     1334}
     1335
    13211336/**
    13221337 * wp_update_term_count() - Updates the amount of terms in taxonomy
    13231338 *
     
    13351350 * @param string $taxonomy The context of the term.
    13361351 * @return bool If no terms will return false, and if successful will return true.
    13371352 */
    1338 function wp_update_term_count( $terms, $taxonomy ) {
    1339         global $wpdb;
     1353function wp_update_term_count( $terms, $taxonomy, $do_deferred=false ) {
     1354        static $_deferred = array();
    13401355
     1356        if ( $do_deferred ) {
     1357                foreach ( array_keys($_deferred) as $tax ) {
     1358                        wp_update_term_count_now( $_deferred[$tax], $tax );
     1359                        unset( $_deferred[$tax] );
     1360                }
     1361        }
     1362
    13411363        if ( empty($terms) )
    13421364                return false;
    13431365
    13441366        if ( !is_array($terms) )
    13451367                $terms = array($terms);
    13461368
     1369        if ( wp_defer_term_counting() ) {
     1370                if ( !isset($_deferred[$taxonomy]) )
     1371                        $_deferred[$taxonomy] = array();
     1372                $_deferred[$taxonomy] = array_unique( array_merge($_deferred[$taxonomy], $terms) );
     1373                return true;
     1374        }
     1375       
     1376        return wp_update_term_count_now( $terms, $taxonomy );
     1377}
     1378
     1379function wp_update_term_count_now( $terms, $taxonomy ) {
     1380        global $wpdb;
     1381
    13471382        $terms = array_map('intval', $terms);
    13481383
    13491384        $taxonomy = get_taxonomy($taxonomy);