Changeset 3371

Show
Ignore:
Timestamp:
12/28/05 04:27:21 (2 years ago)
Author:
ryan
Message:

Create explicit page attachment rewrite rules rather than matching the attachment name against a regexp.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wp-includes/classes.php

    r3370 r3371  
    382382            $where .= " AND (ID = '$reqpage')"; 
    383383        } elseif ('' != $q['attachment']) { 
    384             $q['attachment'] = sanitize_title($q['attachment']); 
     384            $q['attachment'] = str_replace('%2F', '/', urlencode(urldecode($q['attachment']))); 
     385            $attach_paths = '/' . trim($q['attachment'], '/'); 
     386            $q['attachment'] = sanitize_title(basename($attach_paths)); 
    385387            $q['name'] = $q['attachment']; 
    386388            $where .= " AND post_name = '" . $q['attachment'] . "'"; 
     
    954956    function page_rewrite_rules() { 
    955957        $uris = get_settings('page_uris'); 
     958        $attachment_uris = get_settings('page_attachment_uris'); 
    956959 
    957960        $rewrite_rules = array(); 
    958961        $page_structure = $this->get_page_permastruct(); 
    959         if( is_array( $uris ) ) 
    960             { 
    961                 foreach ($uris as $uri => $pagename) { 
    962                     $this->add_rewrite_tag('%pagename%', "($uri)", 'pagename='); 
    963                     $rewrite_rules += $this->generate_rewrite_rules($page_structure); 
    964                 } 
    965             } 
     962        if( is_array( $attachment_uris ) ) { 
     963            foreach ($attachment_uris as $uri => $pagename) { 
     964                $this->add_rewrite_tag('%pagename%', "($uri)", 'attachment='); 
     965                $rewrite_rules += $this->generate_rewrite_rules($page_structure); 
     966            } 
     967        } 
     968        if( is_array( $uris ) ) { 
     969            foreach ($uris as $uri => $pagename) { 
     970                $this->add_rewrite_tag('%pagename%', "($uri)", 'pagename='); 
     971                $rewrite_rules += $this->generate_rewrite_rules($page_structure); 
     972            } 
     973        } 
    966974 
    967975        return $rewrite_rules; 
     
    12261234 
    12271235            if ($num_toks) { 
    1228                 $post = 0; 
     1236                $post = false; 
     1237                $page = false; 
    12291238                if (strstr($struct, '%postname%') || strstr($struct, '%post_id%') 
    12301239                        || strstr($struct, '%pagename%') 
    12311240                        || (strstr($struct, '%year%') &&  strstr($struct, '%monthnum%') && strstr($struct, '%day%') && strstr($struct, '%hour%') && strstr($struct, '%minute') && strstr($struct, '%second%'))) { 
    1232                     $post = 1; 
     1241                    $post = true; 
     1242                    if  ( strstr($struct, '%pagename%') ) 
     1243                        $page = true; 
    12331244                    $trackbackmatch = $match . $trackbackregex; 
    12341245                    $trackbackquery = $trackbackindex . '?' . $query . '&tb=1'; 
     
    12581269 
    12591270                if ($post) { 
    1260                     $rewrite = array($trackbackmatch => $trackbackquery) + $rewrite + 
    1261                         array($sub1 => $subquery, $sub1tb => $subtbquery, $sub1feed => $subfeedquery, $sub1feed2 => $subfeedquery) + 
    1262                         array($sub2 => $subquery, $sub2tb => $subtbquery, $sub2feed => $subfeedquery, $sub2feed2 => $subfeedquery); 
     1271                    $rewrite = array($trackbackmatch => $trackbackquery) + $rewrite; 
     1272                    if ( ! $page ) 
     1273                        $rewrite = $rewrite + array($sub1 => $subquery, $sub1tb => $subtbquery, $sub1feed => $subfeedquery, $sub1feed2 => $subfeedquery); 
     1274                    $rewrite = $rewrite + array($sub2 => $subquery, $sub2tb => $subtbquery, $sub2feed => $subfeedquery, $sub2feed2 => $subfeedquery); 
    12631275                } 
    12641276            } 
  • trunk/wp-includes/functions-post.php

    r3368 r3371  
    796796 
    797797    $page_rewrite_rules = array(); 
    798      
     798    $page_attachment_rewrite_rules = array(); 
     799 
    799800    if ($posts) { 
    800801         
    801802        foreach ($posts as $id => $post) { 
     803 
    802804            // URI => page name 
    803805            $uri = get_page_uri($id); 
    804              
     806            $attachments = $wpdb->get_results("SELECT ID, post_name, post_parent FROM $wpdb->posts WHERE post_status = 'attachment' AND post_parent = '$id'"); 
     807            if ( $attachments ) { 
     808                foreach ( $attachments as $attachment ) { 
     809                    $attach_uri = get_page_uri($attachment->ID); 
     810                    $page_attachment_rewrite_rules[$attach_uri] = $attachment->post_name; 
     811                } 
     812            } 
     813 
    805814            $page_rewrite_rules[$uri] = $post; 
    806815        } 
    807          
     816 
    808817        update_option('page_uris', $page_rewrite_rules); 
    809818         
     819        if ( $page_attachment_rewrite_rules ) 
     820            update_option('page_attachment_uris', $page_attachment_rewrite_rules); 
     821 
    810822        save_mod_rewrite_rules(); 
    811823    }