Make WordPress Core

Changeset 12109


Ignore:
Timestamp:
10/26/2009 01:57:55 PM (17 years ago)
Author:
ryan
Message:

Export and import custom taxonomies. Props chrisscott. fixes #10012

Location:
trunk/wp-admin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/import/wordpress.php

    r12104 r12109  
    2828        var $tags = array ();
    2929        var $categories = array ();
     30        var $terms = array ();
    3031
    3132        var $j = -1;
     
    121122                                        preg_match('|<wp:tag>(.*?)</wp:tag>|is', $importline, $tag);
    122123                                        $this->tags[] = $tag[1];
     124                                        continue;
     125                                }
     126                                if ( false !== strpos($importline, '<wp:term>') ) {
     127                                        preg_match('|<wp:term>(.*?)</wp:term>|is', $importline, $term);
     128                                        $this->terms[] = $term[1];
    123129                                        continue;
    124130                                }
     
    336342
    337343                        $tag_ID = wp_insert_term($tag_name, 'post_tag', $tagarr);
     344                }
     345        }
     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                }
     366
     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);
    338381                }
    339382        }
     
    749792                $this->process_categories();
    750793                $this->process_tags();
     794                $this->process_terms();
    751795                $result = $this->process_posts();
    752796                wp_suspend_cache_invalidation(false);
  • trunk/wp-admin/includes/export.php

    r12100 r12109  
    2525 */
    2626function export_wp($author='') {
    27 global $wpdb, $post_ids, $post;
     27global $wpdb, $post_ids, $post, $wp_taxonomies;
    2828
    2929do_action('export_wp');
     
    4646$categories = (array) get_categories('get=all');
    4747$tags = (array) get_tags('get=all');
     48
     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');
    4855
    4956/**
     
    181188
    182189        echo '<wp:tag_description>' . wxr_cdata($t->description) . '</wp:tag_description>';
     190}
     191
     192/**
     193 * {@internal Missing Short Description}}
     194 *
     195 * @since unknown
     196 *
     197 * @param object $t Term Object
     198 */
     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>';
    183218}
    184219
     
    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>
     293<?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>
    258296<?php endforeach; endif; ?>
    259297        <?php do_action('rss2_head'); ?>
Note: See TracChangeset for help on using the changeset viewer.