WordPress.org

Make WordPress Core

Ticket #21760: 21760.diff

File 21760.diff, 10.8 KB (added by wonderboymusic, 18 months ago)
  • wp-includes/category.php

     
    1414 * @return object List of all of the category IDs. 
    1515 */ 
    1616function get_all_category_ids() { 
    17         if ( ! $cat_ids = wp_cache_get( 'all_category_ids', 'category' ) ) { 
    18                 $cat_ids = get_terms( 'category', array('fields' => 'ids', 'get' => 'all') ); 
    19                 wp_cache_add( 'all_category_ids', $cat_ids, 'category' ); 
    20         } 
    21  
    22         return $cat_ids; 
     17        // this call returns from cache if present 
     18        return get_terms( 'category', array( 'fields' => 'ids', 'get' => 'all' ) ); 
    2319} 
    2420 
    2521/** 
  • wp-includes/taxonomy.php

     
    861861 * @see sanitize_term_field() The $context param lists the available values for get_term_by() $filter param. 
    862862 * 
    863863 * @param int|object $term If integer, will get from database. If object will apply filters and return $term. 
    864  * @param string $taxonomy Taxonomy name that $term is part of. 
     864 * @param string $taxonomy Optional if object is passed for $term. Taxonomy name that $term is part of. 
    865865 * @param string $output Constant OBJECT, ARRAY_A, or ARRAY_N 
    866866 * @param string $filter Optional, default is raw or no WordPress defined filter will applied. 
    867867 * @return mixed|null|WP_Error Term Row from database. Will return null if $term is empty. If taxonomy does not 
    868868 * exist then WP_Error will be returned. 
    869869 */ 
    870 function get_term($term, $taxonomy, $output = OBJECT, $filter = 'raw') { 
     870function get_term( $term, $taxonomy = '', $output = OBJECT, $filter = 'raw' ) { 
    871871        global $wpdb; 
    872872        $null = null; 
    873873 
    874         if ( empty($term) ) { 
    875                 $error = new WP_Error('invalid_term', __('Empty Term')); 
     874        if ( empty( $term ) ) { 
     875                $error = new WP_Error( 'invalid_term', __( 'Empty Term' ) ); 
    876876                return $error; 
    877877        } 
    878878 
    879         if ( ! taxonomy_exists($taxonomy) ) { 
    880                 $error = new WP_Error('invalid_taxonomy', __('Invalid taxonomy')); 
    881                 return $error; 
    882         } 
     879        if ( is_object( $term ) ) 
     880                $taxonomy = $term->taxonomy; 
    883881 
    884         if ( is_object($term) && empty($term->filter) ) { 
    885                 wp_cache_add($term->term_id, $term, $taxonomy); 
     882        if ( ! taxonomy_exists( $taxonomy ) ) 
     883                return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy' ) ); 
     884 
     885        if ( is_object( $term ) && empty( $term->filter ) ) { 
     886                update_term_cache( $term, $taxonomy ); 
    886887                $_term = $term; 
    887888        } else { 
    888889                if ( is_object($term) ) 
    889890                        $term = $term->term_id; 
    890891                if ( !$term = (int) $term ) 
    891892                        return $null; 
    892                 if ( ! $_term = wp_cache_get($term, $taxonomy) ) { 
     893                if ( ! $_term = wp_cache_get( $term, term_cache_group( $taxonomy ) ) ) { 
    893894                        $_term = $wpdb->get_row( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND t.term_id = %d LIMIT 1", $taxonomy, $term) ); 
    894895                        if ( ! $_term ) 
    895896                                return $null; 
    896                         wp_cache_add($term, $_term, $taxonomy); 
     897 
     898                        update_term_cache( $_term, $taxonomy ); 
    897899                } 
    898900        } 
    899901 
     
    948950                return false; 
    949951 
    950952        if ( 'slug' == $field ) { 
     953                $value = sanitize_title( $value ); 
     954                if ( empty( $value ) ) 
     955                        return false; 
     956 
     957                $term_id = wp_cache_get( $value, term_cache_group( $taxonomy, $field ) ); 
    951958                $field = 't.slug'; 
    952                 $value = sanitize_title($value); 
    953                 if ( empty($value) ) 
    954                         return false; 
    955959        } else if ( 'name' == $field ) { 
    956960                // Assume already escaped 
    957961                $value = stripslashes($value); 
     962                $term_id = wp_cache_get( $value, term_cache_group( $taxonomy, $field ) ); 
    958963                $field = 't.name'; 
    959964        } else { 
    960                 $term = get_term( (int) $value, $taxonomy, $output, $filter); 
     965                $term_id = $value; 
     966 
     967                return get_term( $term_id, $taxonomy ); 
     968        } 
     969 
     970        if ( ! empty( $term_id ) ) { 
     971                $term = get_term( (int) $term_id, $taxonomy, $output, $filter ); 
    961972                if ( is_wp_error( $term ) ) 
    962973                        $term = false; 
     974 
    963975                return $term; 
    964976        } 
    965977 
    966         $term = $wpdb->get_row( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND $field = %s LIMIT 1", $taxonomy, $value) ); 
    967         if ( !$term ) 
     978        $term = $wpdb->get_row( $wpdb->prepare( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = %s AND $field = %s LIMIT 1", $taxonomy, $value ) ); 
     979 
     980        if ( ! $term ) 
    968981                return false; 
    969982 
    970         wp_cache_add($term->term_id, $term, $taxonomy); 
    971  
    972983        $term = apply_filters('get_term', $term, $taxonomy); 
    973984        $term = apply_filters("get_$taxonomy", $term, $taxonomy); 
    974985        $term = sanitize_term($term, $taxonomy, $filter); 
     
    12381249        } 
    12391250 
    12401251        // $args can be whatever, only use the args defined in defaults to compute the key 
    1241         $filter_key = ( has_filter('list_terms_exclusions') ) ? serialize($GLOBALS['wp_filter']['list_terms_exclusions']) : ''; 
    1242         $key = md5( serialize( compact(array_keys($defaults)) ) . serialize( $taxonomies ) . $filter_key ); 
     1252        // deprecate 'list_terms_exclusions' - use 'get_terms' filter instead 
     1253        if ( has_filter( 'list_terms_exclusions' ) ) 
     1254                _doing_it_wrong( __FUNCTION__, __( '"list_terms_exclusions" is no longer supported. Use the "get_terms" filter instead.' ), '3.6' ); 
     1255 
     1256        $key = md5( serialize( compact( array_keys( $defaults ) ) ) . serialize( $taxonomies ) ); 
    12431257        $last_changed = wp_cache_get('last_changed', 'terms'); 
    12441258        if ( !$last_changed ) { 
    12451259                $last_changed = time(); 
     
    25702584 
    25712585        foreach ( $object_ids as $id ) 
    25722586                foreach ( $taxonomies as $taxonomy ) 
    2573                         wp_cache_delete($id, "{$taxonomy}_relationships"); 
     2587                        wp_cache_delete( $id, term_cache_group( $taxonomy, 'relationships' ) ); 
    25742588 
    25752589        do_action('clean_object_term_cache', $object_ids, $object_type); 
    25762590} 
     
    25912605        global $wpdb; 
    25922606        static $cleaned = array(); 
    25932607 
    2594         if ( !is_array($ids) ) 
    2595                 $ids = array($ids); 
     2608        if ( ! is_array( $ids ) ) 
     2609                $ids = array( $ids ); 
    25962610 
    25972611        $taxonomies = array(); 
     2612 
     2613        $select = "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id"; 
     2614 
     2615        $ids = array_map( 'intval', $ids ); 
     2616 
    25982617        // If no taxonomy, assume tt_ids. 
    2599         if ( empty($taxonomy) ) { 
    2600                 $tt_ids = array_map('intval', $ids); 
    2601                 $tt_ids = implode(', ', $tt_ids); 
    2602                 $terms = $wpdb->get_results("SELECT term_id, taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id IN ($tt_ids)"); 
     2618        if ( empty( $taxonomy ) ) { 
     2619                $terms = $wpdb->get_results( "$select WHERE tt.term_taxonomy_id IN (" . join( ',', $ids ) . ")" ); 
    26032620                $ids = array(); 
    2604                 foreach ( (array) $terms as $term ) { 
     2621                foreach ( $terms as $term ) { 
    26052622                        $taxonomies[] = $term->taxonomy; 
    26062623                        $ids[] = $term->term_id; 
    2607                         wp_cache_delete($term->term_id, $term->taxonomy); 
    26082624                } 
    26092625                $taxonomies = array_unique($taxonomies); 
    26102626        } else { 
    2611                 $taxonomies = array($taxonomy); 
    2612                 foreach ( $taxonomies as $taxonomy ) { 
    2613                         foreach ( $ids as $id ) { 
    2614                                 wp_cache_delete($id, $taxonomy); 
    2615                         } 
    2616                 } 
     2627                $terms = $wpdb->get_results( $wpdb->prepare( "$select WHERE tt.taxonomy = %s AND tt.term_id IN (" . join( ',', $ids ) . ")", $taxonomy ) ); 
     2628                $taxonomies = array( $taxonomy ); 
    26172629        } 
    26182630 
     2631        foreach ( $terms as $term ) { 
     2632                wp_cache_delete( $term->term_id, term_cache_group( $term->taxonomy ) ); 
     2633                wp_cache_delete( $term->name, term_cache_group( $term->taxonomy, 'names' ) ); 
     2634                wp_cache_delete( $term->slug, term_cache_group( $term->taxonomy, 'slugs' ) ); 
     2635        } 
     2636 
    26192637        foreach ( $taxonomies as $taxonomy ) { 
    26202638                if ( isset($cleaned[$taxonomy]) ) 
    26212639                        continue; 
    26222640                $cleaned[$taxonomy] = true; 
    26232641 
    26242642                if ( $clean_taxonomy ) { 
    2625                         wp_cache_delete('all_ids', $taxonomy); 
    2626                         wp_cache_delete('get', $taxonomy); 
    26272643                        delete_option("{$taxonomy}_children"); 
    26282644                        // Regenerate {$taxonomy}_children 
    26292645                        _get_term_hierarchy($taxonomy); 
     
    26492665 * @return bool|array Empty array if $terms found, but not $taxonomy. False if nothing is in cache for $taxonomy and $id. 
    26502666 */ 
    26512667function get_object_term_cache($id, $taxonomy) { 
    2652         $cache = wp_cache_get($id, "{$taxonomy}_relationships"); 
     2668        $cache = wp_cache_get( $id, term_cache_group( $taxonomy, 'relationships' ) ); 
    26532669        return $cache; 
    26542670} 
    26552671 
     
    26892705        $ids = array(); 
    26902706        foreach ( (array) $object_ids as $id ) { 
    26912707                foreach ( $taxonomies as $taxonomy ) { 
    2692                         if ( false === wp_cache_get($id, "{$taxonomy}_relationships") ) { 
     2708                        if ( false === wp_cache_get( $id, term_cache_group( $taxonomy, 'relationships' ) ) ) { 
    26932709                                $ids[] = $id; 
    26942710                                break; 
    26952711                        } 
     
    27172733 
    27182734        foreach ( $object_terms as $id => $value ) { 
    27192735                foreach ( $value as $taxonomy => $terms ) { 
    2720                         wp_cache_add( $id, $terms, "{$taxonomy}_relationships" ); 
     2736                        wp_cache_add( $id, $terms, term_cache_group( $taxonomy, 'relationships' ) ); 
    27212737                } 
    27222738        } 
    27232739} 
     
    27322748 * @param array $terms List of Term objects to change 
    27332749 * @param string $taxonomy Optional. Update Term to this taxonomy in cache 
    27342750 */ 
    2735 function update_term_cache($terms, $taxonomy = '') { 
    2736         foreach ( (array) $terms as $term ) { 
    2737                 $term_taxonomy = $taxonomy; 
    2738                 if ( empty($term_taxonomy) ) 
    2739                         $term_taxonomy = $term->taxonomy; 
     2751function update_term_cache( $terms, $taxonomy = '' ) { 
     2752        if ( ! is_array( $terms ) ) 
     2753                $terms = array( $terms ); 
    27402754 
    2741                 wp_cache_add($term->term_id, $term, $term_taxonomy); 
     2755        foreach ( $terms as $term ) { 
     2756                $tax = $taxonomy; 
     2757                if ( empty( $tax ) ) 
     2758                        $tax = $term->taxonomy; 
     2759 
     2760                wp_cache_add( $term->term_id, $term, term_cache_group( $tax ) ); 
     2761                wp_cache_add( $term->name, $term->term_id, term_cache_group( $tax, 'names' ) ); 
     2762                wp_cache_add( $term->slug, $term->term_id, term_cache_group( $tax, 'slugs' ) ); 
    27422763        } 
    27432764} 
    27442765 
     2766/** 
     2767 * 
     2768 * @package WordPress 
     2769 * @subpackage Taxonomy 
     2770 * @since 3.6.0 
     2771 * 
     2772 * @param string $taxonomy Taxonomy 
     2773 * @param string $group Optional. ids, names, slugs, or relationships. 
     2774 */ 
     2775function term_cache_group( $taxonomy, $group = 'ids' ) { 
     2776        $tax = get_taxonomy( $taxonomy ); 
     2777 
     2778        if ( ! $tax ) 
     2779                return false; 
     2780 
     2781        if ( $tax->_builtin ) { 
     2782                switch ( $group ) { 
     2783                        case 'names': 
     2784                        case 'slugs': 
     2785                                $key = "$taxonomy:$group"; 
     2786                                break; 
     2787                        case 'relationships': 
     2788                                $key = "{$taxonomy}_relationships"; 
     2789                                break; 
     2790                        default: 
     2791                                $key = $taxonomy; 
     2792                                break; 
     2793                } 
     2794        } else { 
     2795                switch ( $group ) { 
     2796                        case 'ids': 
     2797                        case 'names': 
     2798                        case 'slugs': 
     2799                        case 'relationships': 
     2800                                $key = "taxonomy:$taxonomy:$group"; 
     2801                                break; 
     2802                        default: 
     2803                                $key = "taxonomy:$taxonomy:ids"; 
     2804                                break; 
     2805                } 
     2806        } 
     2807 
     2808        return $key; 
     2809} 
     2810 
    27452811// 
    27462812// Private 
    27472813// 
  • wp-includes/category-template.php

     
    10651065        $terms = get_object_term_cache( $post->ID, $taxonomy ); 
    10661066        if ( false === $terms ) { 
    10671067                $terms = wp_get_object_terms( $post->ID, $taxonomy ); 
    1068                 wp_cache_add($post->ID, $terms, $taxonomy . '_relationships'); 
     1068                wp_cache_add( $post->ID, $terms, term_cache_group( $taxonomy, 'relationships' ) ); 
    10691069        } 
    10701070 
    10711071        $terms = apply_filters( 'get_the_terms', $terms, $post->ID, $taxonomy );