WordPress.org

Make WordPress Core

Changeset 6428


Ignore:
Timestamp:
12/20/07 05:31:39 (7 years ago)
Author:
ryan
Message:

Attachment and post meta import improvements from tellyworth. fixes #5497

File:
1 edited

Legend:

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

    r6390 r6428  
    367367                $this->post_ids_processed[intval($post_ID)] = intval($post_id); 
    368368            } 
    369  
     369             
    370370            // Add categories. 
    371371            if (count($categories) > 0) { 
     
    439439            $value = $this->get_tag( $p, 'wp:meta_value' ); 
    440440            $value = stripslashes($value); // add_post_meta() will escape. 
    441             add_post_meta( $post_id, $key, $value ); 
     441             
     442            $this->process_post_meta($post_id, $key, $value); 
     443 
    442444        } } 
    443445         
     446        do_action('import_post_added', $post_id); 
    444447        print "</li>\n"; 
     448    } 
     449     
     450    function process_post_meta($post_id, $key, $value) { 
     451        // the filter can return false to skip a particular metadata key 
     452        $_key = apply_filters('import_post_meta_key', $key); 
     453        if ( $_key ) { 
     454            add_post_meta( $post_id, $_key, $value ); 
     455            do_action('import_post_meta', $post_id, $_key, $value); 
     456        } 
    445457    } 
    446458     
     
    456468                print '('.size_format(filesize($upload['file'])).')'; 
    457469            } 
     470             
     471            if ( $info = wp_check_filetype($upload['file']) ) { 
     472                $postdata['post_mime_type'] = $info['type']; 
     473            } 
     474            else { 
     475                print __('Invalid file type'); 
     476                return; 
     477            } 
    458478                 
    459479            $postdata['guid'] = $upload['url']; 
     
    462482            $post_id = wp_insert_attachment($postdata, $upload['file']); 
    463483            wp_update_attachment_metadata( $post_id, wp_generate_attachment_metadata( $post_id, $upload['file'] ) ); 
     484             
     485            // remap the thumbnail url.  this isn't perfect because we're just guessing the original url. 
     486            if ( preg_match('@^image/@', $info['type']) && $thumb_url = wp_get_attachment_thumb_url($post_id) ) { 
     487                $parts = pathinfo($remote_url); 
     488                $ext = $parts['extension']; 
     489                $name = basename($parts['basename'], ".{$ext}"); 
     490                $this->url_remap[$parts['dirname'] . '/' . $name . '.thumbnail.' . $ext] = $thumb_url; 
     491            } 
     492             
    464493            return $post_id; 
    465494        } 
     
    500529         
    501530    } 
     531 
     532    // sort by strlen, longest string first 
     533    function cmpr_strlen($a, $b) { 
     534        return strlen($b) - strlen($a); 
     535    } 
    502536     
    503537    // update url references in post bodies to point to the new local files 
     
    505539         
    506540        // make sure we do the longest urls first, in case one is a substring of another 
    507         function cmpr_strlen($a, $b) { 
    508             return strlen($b) - strlen($a); 
    509         } 
    510         uksort($this->url_remap, 'cmpr_strlen'); 
     541        uksort($this->url_remap, array(&$this, 'cmpr_strlen')); 
    511542                 
    512543        global $wpdb; 
    513544        foreach ($this->url_remap as $from_url => $to_url) { 
     545            // remap urls in post_content 
    514546            $wpdb->query( $wpdb->prepare("UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, '%s', '%s')", $from_url, $to_url) ); 
     547            // remap enclosure urls 
     548            $result = $wpdb->query( $wpdb->prepare("UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, '%s', '%s') WHERE meta_key='enclosure'", $from_url, $to_url) ); 
    515549        } 
    516550    } 
     
    528562        } 
    529563    } 
     564     
     565    function is_valid_meta_key($key) { 
     566        // skip _wp_attached_file metadata since we'll regenerate it from scratch 
     567        if ( $key == '_wp_attached_file' ) 
     568            return false; 
     569        return $key; 
     570    } 
    530571 
    531572    function import($id, $fetch_attachments = false) { 
     
    533574        $this->fetch_attachments = (bool) $fetch_attachments; 
    534575 
     576        add_filter('import_post_meta_key', array($this, 'is_valid_meta_key')); 
    535577        $file = get_attached_file($this->id); 
    536578        $this->import_file($file); 
     
    548590        $this->backfill_parents(); 
    549591        $this->backfill_attachment_urls(); 
     592         
     593        // clear the caches after backfilling 
     594        foreach ($this->post_ids_processed as $post_id) 
     595            clean_post_cache($post_id); 
     596         
    550597        wp_defer_term_counting(false); 
    551598        if ( is_wp_error( $result ) ) 
Note: See TracChangeset for help on using the changeset viewer.