WordPress.org

Make WordPress Core

Ticket #14084: garyc40.14084.2.diff

File garyc40.14084.2.diff, 4.0 KB (added by garyc40, 4 years ago)

use get_taxonomies() in get_object_taxonomies()

  • wp-includes/post.php

    diff --git wp-includes/post.php wp-includes/post.php
    index cea834b..85d812a 100644
    function wp_get_single_post($postid = 0, $mode = OBJECT) { 
    23282328        ) 
    23292329                return ( OBJECT == $mode ? null : array() ); 
    23302330 
     2331        // get custom taxonomies 
     2332        $taxonomies = get_object_taxonomies( $post, 'names', array( '_builtin' => false ) ); 
     2333        $tax_input = array(); 
     2334 
     2335        if ( ! empty( $taxonomies ) ) { 
     2336                foreach ( $taxonomies as $taxonomy ) { 
     2337                        $post_terms = wp_get_post_terms( $postid, $taxonomy, array( 'fields' => 'ids' ) ); 
     2338                        if ( ! empty( $post_terms ) ) 
     2339                                $tax_input[$taxonomy] = $post_terms; 
     2340                } 
     2341        } 
     2342 
    23312343        // Set categories and tags 
    23322344        if ( $mode == OBJECT ) { 
    23332345                $post->post_category = array(); 
    function wp_get_single_post($postid = 0, $mode = OBJECT) { 
    23362348                $post->tags_input = array(); 
    23372349                if ( is_object_in_taxonomy($post->post_type, 'post_tag') ) 
    23382350                        $post->tags_input = wp_get_post_tags($postid, array('fields' => 'names')); 
     2351                $post->tax_input = $tax_input; 
    23392352        } else { 
    23402353                $post['post_category'] = array(); 
    23412354                if ( is_object_in_taxonomy($post['post_type'], 'category') ) 
    function wp_get_single_post($postid = 0, $mode = OBJECT) { 
    23432356                $post['tags_input'] = array(); 
    23442357                if ( is_object_in_taxonomy($post['post_type'], 'post_tag') ) 
    23452358                        $post['tags_input'] = wp_get_post_tags($postid, array('fields' => 'names')); 
     2359                $post['tax_input'] = $tax_input; 
    23462360        } 
    2347  
    23482361        return $post; 
    23492362} 
    23502363 
  • wp-includes/taxonomy.php

    diff --git wp-includes/taxonomy.php wp-includes/taxonomy.php
    index 60068c5..a8c3bed 100644
    function get_taxonomies( $args = array(), $output = 'names', $operator = 'and' ) 
    140140 * 
    141141 * @param array|string|object $object Name of the type of taxonomy object, or an object (row from posts) 
    142142 * @param string $output The type of output to return, either taxonomy 'names' or 'objects'. 'names' is the default. 
     143 * @param array $args An array of key => value arguments to match against the taxonomy objects. 
    143144 * @return array The names of all taxonomy of $object_type. 
    144145 */ 
    145 function get_object_taxonomies($object, $output = 'names') { 
    146         global $wp_taxonomies; 
     146function get_object_taxonomies( $object, $output = 'names', $args = array() ) { 
    147147 
    148148        if ( is_object($object) ) { 
    149149                if ( $object->post_type == 'attachment' ) 
    function get_object_taxonomies($object, $output = 'names') { 
    152152        } 
    153153 
    154154        $object = (array) $object; 
    155  
    156         $taxonomies = array(); 
    157         foreach ( (array) $wp_taxonomies as $tax_name => $tax_obj ) { 
    158                 if ( array_intersect($object, (array) $tax_obj->object_type) ) { 
    159                         if ( 'names' == $output ) 
    160                                 $taxonomies[] = $tax_name; 
    161                         else 
    162                                 $taxonomies[ $tax_name ] = $tax_obj; 
    163                 } 
     155         
     156        $list = get_taxonomies( $args, 'objects' ); 
     157         
     158        foreach ( $list as $tax_name => $tax_obj ) { 
     159                if ( ! array_intersect($object, (array) $tax_obj->object_type) ) 
     160                        unset( $list[$tax_name] ); 
    164161        } 
    165162 
    166         return $taxonomies; 
     163        if ( 'names' == $output ) 
     164                $list = array_values( wp_list_pluck( $list, 'name' ) ); 
     165 
     166        return $list; 
    167167} 
    168168 
    169169/** 
    function is_taxonomy_hierarchical($taxonomy) { 
    256256 * boolean value. 
    257257 * 
    258258 * update_count_callback - works much like a hook, in that it will be called 
    259  * when the count is updated. 
     259 * when the count is updated; if not defined and show_ui is true, defaults to '_update_post_term_count'. 
     260 * To suppress default callback in any cases, set update_count_callback to false. 
    260261 * 
    261262 * rewrite - false to prevent rewrite, or array('slug'=>$slug) to customize 
    262263 * permastruct; default will use $taxonomy as slug. 
    function register_taxonomy( $taxonomy, $object_type, $args = array() ) { 
    335336        if ( is_null($args['show_ui']) ) 
    336337                $args['show_ui'] = $args['public']; 
    337338 
     339        if ( $args['show_ui'] && $args['update_count_callback'] === '' ) { 
     340                $args['update_count_callback'] = '_update_post_term_count'; 
     341        } 
     342 
    338343        // Whether to show this type in nav-menus.php. Defaults to the setting for public. 
    339344        if ( null === $args['show_in_nav_menus'] ) 
    340345                $args['show_in_nav_menus'] = $args['public'];