WordPress.org

Make WordPress Core

Ticket #10012: custom_taxonomy_export.patch

File custom_taxonomy_export.patch, 4.7 KB (added by chrisscott, 5 years ago)
  • wp-admin/includes/export.php

     
    2424 * @param unknown_type $author 
    2525 */ 
    2626function export_wp($author='') { 
    27 global $wpdb, $post_ids, $post; 
     27global $wpdb, $post_ids, $post, $wp_taxonomies; 
    2828 
    2929do_action('export_wp'); 
    3030 
     
    4646$categories = (array) get_categories('get=all'); 
    4747$tags = (array) get_tags('get=all'); 
    4848 
     49$custom_taxonomies = $wp_taxonomies; 
     50unset($custom_taxonomies['category']); 
     51unset($custom_taxonomies['post_tag']); 
     52unset($custom_taxonomies['link_category']); 
     53$custom_taxonomies = array_keys($custom_taxonomies); 
     54$terms = (array) get_terms($custom_taxonomies, 'get=all'); 
     55 
    4956/** 
    5057 * {@internal Missing Short Description}} 
    5158 * 
     
    186193 * {@internal Missing Short Description}} 
    187194 * 
    188195 * @since unknown 
     196 * 
     197 * @param object $t Term Object 
    189198 */ 
     199function wxr_term_name($t) { 
     200        if ( empty($t->name) ) 
     201                return; 
     202 
     203        echo '<wp:term_name>' . wxr_cdata($t->name) . '</wp:term_name>'; 
     204} 
     205 
     206/** 
     207 * {@internal Missing Short Description}} 
     208 * 
     209 * @since unknown 
     210 * 
     211 * @param object $t Term Object 
     212 */ 
     213function wxr_term_description($t) { 
     214        if ( empty($t->description) ) 
     215                return; 
     216 
     217        echo '<wp:term_description>' . wxr_cdata($t->description) . '</wp:term_description>'; 
     218} 
     219 
     220/** 
     221 * {@internal Missing Short Description}} 
     222 * 
     223 * @since unknown 
     224 */ 
    190225function wxr_post_taxonomy() { 
    191226        $categories = get_the_category(); 
    192227        $tags = get_the_tags(); 
     
    256291<?php if ( $tags ) : foreach ( $tags as $t ) : ?> 
    257292        <wp:tag><wp:tag_slug><?php echo $t->slug; ?></wp:tag_slug><?php wxr_tag_name($t); ?><?php wxr_tag_description($t); ?></wp:tag> 
    258293<?php endforeach; endif; ?> 
     294<?php if ( $terms ) : foreach ( $terms as $t ) : ?> 
     295        <wp:term><wp:term_taxonomy><?php echo $t->taxonomy; ?></wp:term_taxonomy><wp:term_slug><?php echo $t->slug; ?></wp:term_slug><wp:term_parent><?php echo $t->parent ? $custom_taxonomies[$t->parent]->name : ''; ?></wp:term_parent><?php wxr_term_name($t); ?><?php wxr_term_description($t); ?></wp:term> 
     296<?php endforeach; endif; ?> 
    259297        <?php do_action('rss2_head'); ?> 
    260298        <?php if ($post_ids) { 
    261299                global $wp_query; 
  • wp-admin/import/wordpress.php

     
    2727        var $author_ids = array (); 
    2828        var $tags = array (); 
    2929        var $categories = array (); 
     30        var $terms = array (); 
    3031 
    3132        var $j = -1; 
    3233        var $fetch_attachments = false; 
     
    122123                                        $this->tags[] = $tag[1]; 
    123124                                        continue; 
    124125                                } 
     126                                if ( false !== strpos($importline, '<wp:term>') ) { 
     127                                        preg_match('|<wp:term>(.*?)</wp:term>|is', $importline, $term); 
     128                                        $this->terms[] = $term[1]; 
     129                                        continue; 
     130                                } 
    125131                                if ( false !== strpos($importline, '<item>') ) { 
    126132                                        $this->post = ''; 
    127133                                        $doing_entry = true; 
     
    337343                        $tag_ID = wp_insert_term($tag_name, 'post_tag', $tagarr); 
    338344                } 
    339345        } 
     346         
     347        function process_terms() { 
     348                global $wpdb, $wp_taxonomies; 
     349                 
     350                $custom_taxonomies = $wp_taxonomies; 
     351                // get rid of the standard taxonomies 
     352                unset( $custom_taxonomies['category'] ); 
     353                unset( $custom_taxonomies['post_tag'] ); 
     354                unset( $custom_taxonomies['link_category'] ); 
     355                 
     356                $custom_taxonomies = array_keys( $custom_taxonomies ); 
     357                $current_terms = (array) get_terms( $custom_taxonomies, 'get=all' ); 
     358                $taxonomies = array(); 
     359                foreach ( $current_terms as $term ) { 
     360                        if ( isset( $_terms[$term->taxonomy] ) ) { 
     361                                $taxonomies[$term->taxonomy] = array_merge( $taxonomies[$term->taxonomy], array($term->name) ); 
     362                        } else { 
     363                                $taxonomies[$term->taxonomy] = array($term->name); 
     364                        } 
     365                } 
    340366 
     367                while ( $c = array_shift($this->terms) ) { 
     368                        $term_name = trim($this->get_tag( $c, 'wp:term_name' )); 
     369                        $term_taxonomy = trim($this->get_tag( $c, 'wp:term_taxonomy' )); 
     370 
     371                        // If the term exists in the taxonomy we leave it alone 
     372                        if ( isset($taxonomies[$term_taxonomy] ) && in_array( $term_name, $taxonomies[$term_taxonomy] ) ) 
     373                                continue; 
     374 
     375                        $slug = $this->get_tag( $c, 'wp:term_slug' ); 
     376                        $description = $this->get_tag( $c, 'wp:term_description' ); 
     377 
     378                        $termarr = compact('slug', 'description'); 
     379 
     380                        $term_ID = wp_insert_term($term_name, $this->get_tag( $c, 'wp:term_taxonomy' ), $termarr); 
     381                } 
     382        } 
     383 
    341384        function process_author($post) { 
    342385                $author = $this->get_tag( $post, 'dc:creator' ); 
    343386                if ($author) 
     
    748791                $this->get_entries(); 
    749792                $this->process_categories(); 
    750793                $this->process_tags(); 
     794                $this->process_terms(); 
    751795                $result = $this->process_posts(); 
    752796                wp_suspend_cache_invalidation(false); 
    753797                $this->backfill_parents();