Make WordPress Core

Ticket #15091: wordpress-importer.diff

File wordpress-importer.diff, 2.2 KB (added by wpdavis, 14 years ago)

Attempts a patch to make sure the WordPress importer brings in all terms with each post

  • wordpress-importer.php

     
    463463                $post_content = str_replace('<br>', '<br />', $post_content);
    464464                $post_content = str_replace('<hr>', '<hr />', $post_content);
    465465
    466                 preg_match_all('|<category domain="tag">(.*?)</category>|is', $post, $tags);
    467                 $tags = $tags[1];
     466                preg_match_all('|<category\s*(?:\bdomain="(.*?)"\s*)?(?:\bnicename="(.*?)")?>(?:<!\[CDATA\[)?(.*?)(?:\]\]>)?</category>|', $post, $terms, PREG_SET_ORDER);
    468467
    469                 $tag_index = 0;
    470                 foreach ($tags as $tag) {
    471                         $tags[$tag_index] = $wpdb->escape( html_entity_decode( str_replace(array( '<![CDATA[', ']]>' ), '', $tag ) ) );
    472                         $tag_index++;
    473                 }
    474 
    475468                preg_match_all('|<category>(.*?)</category>|is', $post, $categories);
    476469                $categories = $categories[1];
    477470
     
    556549                        }
    557550
    558551                        // Add terms.
    559                         if (count($tags) > 0) {
    560                                 $post_tags = array();
    561                                 foreach ($tags as $tag) {
    562                                         if ( '' == $tag )
     552                        if (count($terms) > 0) {
     553                                $post_terms = array();
     554                                foreach ($terms as $term) {
     555                                        if ( '' == $term[1] || 'category' == $term[1])
    563556                                                continue;
    564                                         $slug = sanitize_term_field('slug', $tag, 0, 'post_tag', 'db');
    565                                         $tag_obj = get_term_by('slug', $slug, 'post_tag');
    566                                         $tag_id = 0;
    567                                         if ( ! empty($tag_obj) )
    568                                                 $tag_id = $tag_obj->term_id;
    569                                         if ( $tag_id == 0 ) {
    570                                                 $tag = $wpdb->escape($tag);
    571                                                 $tag_id = wp_insert_term($tag, 'post_tag');
    572                                                 if ( is_wp_error($tag_id) )
     557                                        $slug = $term[2];
     558                                        echo $slug;
     559                                        $domain = $term[1];
     560                                        if ($domain == 'tag') {
     561                                                $domain = 'post_tag';
     562                                        }
     563                                        $term = $wpdb->escape($term[3]);
     564                                        $term_id = term_exists( $term, $domain );
     565                                        if ( $term_id || $term_id != 0) {
     566                                                echo $term_id;
     567                                        } else {
     568                                                $term_id = wp_insert_term($term, $domain);
     569                                                echo $term_id;
     570                                                if ( is_wp_error($term_id) )
    573571                                                        continue;
    574                                                 $tag_id = $tag_id['term_id'];
     572                                                $term_id = $term_id['term_id'];
    575573                                        }
    576                                         $post_tags[] = intval($tag_id);
     574                                        wp_set_post_terms($post_id, $term, $domain,true);
    577575                                }
    578                                 wp_set_post_tags($post_id, $post_tags);
    579576                        }
    580577                }
    581578