WordPress.org

Make WordPress Core

Ticket #35495: 35495.diff

File 35495.diff, 2.7 KB (added by flixos90, 6 years ago)

Initial patch allowing an empty $taxonomies parameter

  • src/wp-includes/taxonomy.php

     
    11231123 * @return array|int|WP_Error List of WP_Term instances and their children. Will return WP_Error, if any of $taxonomies
    11241124 *                            do not exist.
    11251125 */
    1126 function get_terms( $taxonomies, $args = '' ) {
     1126function get_terms( $taxonomies = array(), $args = '' ) {
    11271127        global $wpdb;
    11281128        $empty_array = array();
    11291129
    11301130        $single_taxonomy = ! is_array( $taxonomies ) || 1 === count( $taxonomies );
    11311131        if ( ! is_array( $taxonomies ) ) {
    1132                 $taxonomies = array( $taxonomies );
     1132                if ( empty( $taxonomies ) ) {
     1133                        $taxonomies = array();
     1134                } else {
     1135                        $taxonomies = array( $taxonomies );
     1136                }
    11331137        }
    11341138
    11351139        foreach ( $taxonomies as $taxonomy ) {
     
    12861290                $order = 'ASC';
    12871291        }
    12881292
    1289         $where = "tt.taxonomy IN ('" . implode("', '", $taxonomies) . "')";
     1293        $where = "";
     1294        if ( 0 < count( $taxonomies ) ) {
     1295                $where = "tt.taxonomy IN ('" . implode("', '", $taxonomies) . "')";
     1296        }
    12901297
    12911298        $exclude = $args['exclude'];
    12921299        $exclude_tree = $args['exclude_tree'];
     
    13081315        if ( ! empty( $exclude_tree ) ) {
    13091316                $exclude_tree = wp_parse_id_list( $exclude_tree );
    13101317                $excluded_children = $exclude_tree;
     1318                $query_taxonomies = array();
     1319                if ( 0 < count( $taxonomies ) ) {
     1320                        $query_taxonomies = $taxonomies[0];
     1321                }
    13111322                foreach ( $exclude_tree as $extrunk ) {
    13121323                        $excluded_children = array_merge(
    13131324                                $excluded_children,
    1314                                 (array) get_terms( $taxonomies[0], array( 'child_of' => intval( $extrunk ), 'fields' => 'ids', 'hide_empty' => 0 ) )
     1325                                (array) get_terms( $query_taxonomies, array( 'child_of' => intval( $extrunk ), 'fields' => 'ids', 'hide_empty' => 0 ) )
    13151326                        );
    13161327                }
    13171328                $exclusions = array_merge( $excluded_children, $exclusions );
     
    14221433                $distinct .= "DISTINCT";
    14231434        }
    14241435
     1436        if ( 0 === strpos( $where, ' AND ' ) ) {
     1437                $where = substr( $where, 5 );
     1438        }
     1439
    14251440        $selects = array();
    14261441        switch ( $args['fields'] ) {
    14271442                case 'all':
     
    14901505        $order = isset( $clauses[ 'order' ] ) ? $clauses[ 'order' ] : '';
    14911506        $limits = isset( $clauses[ 'limits' ] ) ? $clauses[ 'limits' ] : '';
    14921507
    1493         $query = "SELECT $distinct $fields FROM $wpdb->terms AS t $join WHERE $where $orderby $order $limits";
     1508        if ( ! empty( $where ) ) {
     1509                $where = "WHERE " . $where;
     1510        }
    14941511
     1512        $query = "SELECT $distinct $fields FROM $wpdb->terms AS t $join $where $orderby $order $limits";
     1513
    14951514        // $args can be anything. Only use the args defined in defaults to compute the key.
    14961515        $key = md5( serialize( wp_array_slice_assoc( $args, array_keys( $defaults ) ) ) . serialize( $taxonomies ) . $query );
    14971516        $last_changed = wp_cache_get( 'last_changed', 'terms' );