WordPress.org

Make WordPress Core

Changeset 3638


Ignore:
Timestamp:
03/12/2006 10:57:00 PM (12 years ago)
Author:
ryan
Message:

Rewrite API additions and improvements from David House. #2433

Location:
trunk
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-feed.php

    r2491 r3638  
    66}
    77
    8 // Remove the pad, if present.
    9 $feed = preg_replace('/^_+/', '', $feed);
    10 
    11 if ($feed == '' || $feed == 'feed') {
    12     $feed = 'rss2';
    13 }
    14 
    15 if ( is_single() || ($withcomments == 1) ) {
    16     require(ABSPATH . 'wp-commentsrss2.php');
    17 } else {
    18     switch ($feed) {
    19     case 'atom':
    20         require(ABSPATH . 'wp-atom.php');
    21         break;
    22     case 'rdf':
    23         require(ABSPATH . 'wp-rdf.php');
    24         break;
    25     case 'rss':
    26         require(ABSPATH . 'wp-rss.php');
    27         break;
    28     case 'rss2':
    29         require(ABSPATH . 'wp-rss2.php');
    30         break;
    31     case 'comments-rss2':
    32         require(ABSPATH . 'wp-commentsrss2.php');
    33         break;
    34     }
    35 }
     8do_feed();
    369
    3710?>
  • trunk/wp-includes/classes.php

    r3601 r3638  
    856856}
    857857
    858 class WP_Rewrite {
    859     var $permalink_structure;
    860     var $category_base;
    861     var $category_structure;
    862     var $author_base = 'author';
    863     var $author_structure;
    864     var $date_structure;
    865     var $page_structure;
    866     var $search_base = 'search';
    867     var $search_structure;
    868     var $comments_base = 'comments';
    869     var $feed_base = 'feed';
    870     var $comments_feed_structure;
    871     var $feed_structure;
    872     var $front;
    873     var $root = '';
    874     var $index = 'index.php';
    875     var $matches = '';
    876     var $rules;
    877     var $use_verbose_rules = false;
    878     var $rewritecode =
    879         array(
    880                     '%year%',
    881                     '%monthnum%',
    882                     '%day%',
    883                     '%hour%',
    884                     '%minute%',
    885                     '%second%',
    886                     '%postname%',
    887                     '%post_id%',
    888                     '%category%',
    889                     '%author%',
    890                     '%pagename%',
    891                     '%search%'
    892                     );
    893 
    894     var $rewritereplace =
    895         array(
    896                     '([0-9]{4})',
    897                     '([0-9]{1,2})',
    898                     '([0-9]{1,2})',
    899                     '([0-9]{1,2})',
    900                     '([0-9]{1,2})',
    901                     '([0-9]{1,2})',
    902                     '([^/]+)',
    903                     '([0-9]+)',
    904                     '(.+?)',
    905                     '([^/]+)',
    906                     '([^/]+)',
    907                     '(.+)'
    908                     );
    909 
    910     var $queryreplace =
    911         array (
    912                     'year=',
    913                     'monthnum=',
    914                     'day=',
    915                     'hour=',
    916                     'minute=',
    917                     'second=',
    918                     'name=',
    919                     'p=',
    920                     'category_name=',
    921                     'author_name=',
    922                     'pagename=',
    923                     's='
    924                     );
    925 
    926     var $feeds = array ('feed', 'rdf', 'rss', 'rss2', 'atom');
    927 
    928     function using_permalinks() {
    929         if (empty($this->permalink_structure))
    930             return false;
    931         else
    932             return true;
    933     }
    934 
    935     function using_index_permalinks() {
    936         if (empty($this->permalink_structure)) {
    937             return false;
    938         }
    939 
    940         // If the index is not in the permalink, we're using mod_rewrite.
    941         if (preg_match('#^/*' . $this->index . '#', $this->permalink_structure)) {
    942             return true;
    943         }
    944    
    945         return false;
    946     }
    947 
    948     function using_mod_rewrite_permalinks() {
    949         if ( $this->using_permalinks() && ! $this->using_index_permalinks())
    950             return true;
    951         else
    952             return false;
    953     }
    954 
    955     function preg_index($number) {
    956         $match_prefix = '$';
    957         $match_suffix = '';
    958 
    959         if (! empty($this->matches)) {
    960             $match_prefix = '$' . $this->matches . '[';
    961             $match_suffix = ']';
    962         }       
    963 
    964         return "$match_prefix$number$match_suffix";       
    965     }
    966 
    967     function page_rewrite_rules() {
    968         $uris = get_settings('page_uris');
    969         $attachment_uris = get_settings('page_attachment_uris');
    970 
    971         $rewrite_rules = array();
    972         $page_structure = $this->get_page_permastruct();
    973         if( is_array( $attachment_uris ) ) {
    974             foreach ($attachment_uris as $uri => $pagename) {
    975                 $this->add_rewrite_tag('%pagename%', "($uri)", 'attachment=');
    976                 $rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure));
    977             }
    978         }
    979         if( is_array( $uris ) ) {
    980             foreach ($uris as $uri => $pagename) {
    981                 $this->add_rewrite_tag('%pagename%', "($uri)", 'pagename=');
    982                 $rewrite_rules = array_merge($rewrite_rules, $this->generate_rewrite_rules($page_structure));
    983             }
    984         }
    985 
    986         return $rewrite_rules;
    987     }
    988 
    989     function get_date_permastruct() {
    990         if (isset($this->date_structure)) {
    991             return $this->date_structure;
    992         }
    993 
    994         if (empty($this->permalink_structure)) {
    995             $this->date_structure = '';
    996             return false;
    997         }
    998 
    999         // The date permalink must have year, month, and day separated by slashes.
    1000         $endians = array('%year%/%monthnum%/%day%', '%day%/%monthnum%/%year%', '%monthnum%/%day%/%year%');
    1001 
    1002         $this->date_structure = '';
    1003         $date_endian = '';
    1004 
    1005         foreach ($endians as $endian) {
    1006             if (false !== strpos($this->permalink_structure, $endian)) {
    1007                 $date_endian= $endian;
    1008                 break;
    1009             }
    1010         }
    1011 
    1012         if ( empty($date_endian) )
    1013             $date_endian = '%year%/%monthnum%/%day%';
    1014 
    1015         // Do not allow the date tags and %post_id% to overlap in the permalink
    1016         // structure. If they do, move the date tags to $front/date/. 
    1017         $front = $this->front;
    1018         preg_match_all('/%.+?%/', $this->permalink_structure, $tokens);
    1019         $tok_index = 1;
    1020         foreach ($tokens[0] as $token) {
    1021             if ( ($token == '%post_id%') && ($tok_index <= 3) ) {
    1022                 $front = $front . 'date/';
    1023                 break;
    1024             }
    1025         }
    1026 
    1027         $this->date_structure = $front . $date_endian;
    1028 
    1029         return $this->date_structure;
    1030     }
    1031 
    1032     function get_year_permastruct() {
    1033         $structure = $this->get_date_permastruct($this->permalink_structure);
    1034 
    1035         if (empty($structure)) {
    1036             return false;
    1037         }
    1038 
    1039         $structure = str_replace('%monthnum%', '', $structure);
    1040         $structure = str_replace('%day%', '', $structure);
    1041 
    1042         $structure = preg_replace('#/+#', '/', $structure);
    1043 
    1044         return $structure;
    1045     }
    1046 
    1047     function get_month_permastruct() {
    1048         $structure = $this->get_date_permastruct($this->permalink_structure);
    1049 
    1050         if (empty($structure)) {
    1051             return false;
    1052         }
    1053 
    1054         $structure = str_replace('%day%', '', $structure);
    1055 
    1056         $structure = preg_replace('#/+#', '/', $structure);
    1057 
    1058         return $structure;
    1059     }
    1060 
    1061     function get_day_permastruct() {
    1062         return $this->get_date_permastruct($this->permalink_structure);
    1063     }
    1064 
    1065     function get_category_permastruct() {
    1066         if (isset($this->category_structure)) {
    1067             return $this->category_structure;
    1068         }
    1069 
    1070         if (empty($this->permalink_structure)) {
    1071             $this->category_structure = '';
    1072             return false;
    1073         }
    1074 
    1075         if (empty($this->category_base))
    1076             $this->category_structure = $this->front . 'category/';
    1077         else
    1078             $this->category_structure = $this->category_base . '/';
    1079 
    1080         $this->category_structure .= '%category%';
    1081 
    1082         return $this->category_structure;
    1083     }
    1084 
    1085     function get_author_permastruct() {
    1086         if (isset($this->author_structure)) {
    1087             return $this->author_structure;
    1088         }
    1089 
    1090         if (empty($this->permalink_structure)) {
    1091             $this->author_structure = '';
    1092             return false;
    1093         }
    1094 
    1095         $this->author_structure = $this->front . $this->author_base . '/%author%';
    1096 
    1097         return $this->author_structure;
    1098     }
    1099 
    1100     function get_search_permastruct() {
    1101         if (isset($this->search_structure)) {
    1102             return $this->search_structure;
    1103         }
    1104 
    1105         if (empty($this->permalink_structure)) {
    1106             $this->search_structure = '';
    1107             return false;
    1108         }
    1109 
    1110         $this->search_structure = $this->root . $this->search_base . '/%search%';
    1111 
    1112         return $this->search_structure;
    1113     }
    1114 
    1115     function get_page_permastruct() {
    1116         if (isset($this->page_structure)) {
    1117             return $this->page_structure;
    1118         }
    1119 
    1120         if (empty($this->permalink_structure)) {
    1121             $this->page_structure = '';
    1122             return false;
    1123         }
    1124 
    1125         $this->page_structure = $this->root . '%pagename%';
    1126 
    1127         return $this->page_structure;
    1128     }
    1129 
    1130     function get_feed_permastruct() {
    1131         if (isset($this->feed_structure)) {
    1132             return $this->feed_structure;
    1133         }
    1134 
    1135         if (empty($this->permalink_structure)) {
    1136             $this->feed_structure = '';
    1137             return false;
    1138         }
    1139 
    1140         $this->feed_structure = $this->root . $this->feed_base . '/%feed%';
    1141 
    1142         return $this->feed_structure;
    1143     }
    1144 
    1145     function get_comment_feed_permastruct() {
    1146         if (isset($this->comment_feed_structure)) {
    1147             return $this->comment_feed_structure;
    1148         }
    1149 
    1150         if (empty($this->permalink_structure)) {
    1151             $this->comment_feed_structure = '';
    1152             return false;
    1153         }
    1154 
    1155         $this->comment_feed_structure = $this->root . $this->comments_base . '/' . $this->feed_base . '/%feed%';
    1156 
    1157         return $this->comment_feed_structure;
    1158     }
    1159 
    1160     function add_rewrite_tag($tag, $pattern, $query) {
    1161         // If the tag already exists, replace the existing pattern and query for
    1162         // that tag, otherwise add the new tag, pattern, and query to the end of
    1163         // the arrays.
    1164         $position = array_search($tag, $this->rewritecode);
    1165         if (FALSE !== $position && NULL !== $position) {
    1166             $this->rewritereplace[$position] = $pattern;
    1167             $this->queryreplace[$position] = $query;
    1168         } else {
    1169             $this->rewritecode[] = $tag;
    1170             $this->rewritereplace[] = $pattern;
    1171             $this->queryreplace[] = $query;
    1172         }
    1173     }
    1174 
    1175     function generate_rewrite_rules($permalink_structure, $paged = true, $feed = true, $forcomments = false, $walk_dirs = true) {
    1176         $feedregex2 = '';
    1177         foreach ($this->feeds as $feed_name) {
    1178             $feedregex2 .= $feed_name . '|';
    1179         }
    1180         $feedregex2 = '(' . trim($feedregex2, '|') .  ')/?$';
    1181         $feedregex = $this->feed_base  . '/' . $feedregex2;
    1182 
    1183         $trackbackregex = 'trackback/?$';
    1184         $pageregex = 'page/?([0-9]{1,})/?$';
    1185 
    1186         $front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));
    1187         preg_match_all('/%.+?%/', $permalink_structure, $tokens);
    1188 
    1189         $num_tokens = count($tokens[0]);
    1190 
    1191         $index = $this->index;
    1192         $feedindex = $index;
    1193         $trackbackindex = $index;
    1194         for ($i = 0; $i < $num_tokens; ++$i) {
    1195             if (0 < $i) {
    1196                 $queries[$i] = $queries[$i - 1] . '&';
    1197             }
    1198              
    1199             $query_token = str_replace($this->rewritecode, $this->queryreplace, $tokens[0][$i]) . $this->preg_index($i+1);
    1200             $queries[$i] .= $query_token;
    1201         }
    1202 
    1203         $structure = $permalink_structure;
    1204         if ($front != '/') {
    1205             $structure = str_replace($front, '', $structure);
    1206         }
    1207         $structure = trim($structure, '/');
    1208         if ($walk_dirs) {
    1209             $dirs = explode('/', $structure);
    1210         } else {
    1211             $dirs[] = $structure;
    1212         }
    1213         $num_dirs = count($dirs);
    1214 
    1215         $front = preg_replace('|^/+|', '', $front);
    1216 
    1217         $post_rewrite = array();
    1218         $struct = $front;
    1219         for ($j = 0; $j < $num_dirs; ++$j) {
    1220             $struct .= $dirs[$j] . '/';
    1221             $struct = ltrim($struct, '/');
    1222             $match = str_replace($this->rewritecode, $this->rewritereplace, $struct);
    1223             $num_toks = preg_match_all('/%.+?%/', $struct, $toks);
    1224             $query = $queries[$num_toks - 1];
    1225 
    1226             $pagematch = $match . $pageregex;
    1227             $pagequery = $index . '?' . $query . '&paged=' . $this->preg_index($num_toks + 1);
    1228 
    1229             $feedmatch = $match . $feedregex;
    1230             $feedquery = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1);
    1231 
    1232             $feedmatch2 = $match . $feedregex2;
    1233             $feedquery2 = $feedindex . '?' . $query . '&feed=' . $this->preg_index($num_toks + 1);
    1234 
    1235             if ($forcomments) {
    1236                 $feedquery .= '&withcomments=1';
    1237                 $feedquery2 .= '&withcomments=1';
    1238             }
    1239 
    1240             $rewrite = array();
    1241             if ($feed)
    1242                 $rewrite = array($feedmatch => $feedquery, $feedmatch2 => $feedquery2);
    1243             if ($paged)
    1244                 $rewrite = array_merge($rewrite, array($pagematch => $pagequery));
    1245 
    1246             if ($num_toks) {
    1247                 $post = false;
    1248                 $page = false;
    1249                 if (strstr($struct, '%postname%') || strstr($struct, '%post_id%')
    1250                         || strstr($struct, '%pagename%')
    1251                         || (strstr($struct, '%year%') &&  strstr($struct, '%monthnum%') && strstr($struct, '%day%') && strstr($struct, '%hour%') && strstr($struct, '%minute') && strstr($struct, '%second%'))) {
    1252                     $post = true;
    1253                     if  ( strstr($struct, '%pagename%') )
    1254                         $page = true;
    1255                     $trackbackmatch = $match . $trackbackregex;
    1256                     $trackbackquery = $trackbackindex . '?' . $query . '&tb=1';
    1257                     $match = rtrim($match, '/');
    1258                     $submatchbase = str_replace(array('(',')'),'',$match);
    1259                     $sub1 = $submatchbase . '/([^/]+)/';
    1260                     $sub1tb = $sub1 . $trackbackregex;
    1261                     $sub1feed = $sub1 . $feedregex;
    1262                     $sub1feed2 = $sub1 . $feedregex2;
    1263                     $sub1 .= '?$';
    1264                     $sub2 = $submatchbase . '/attachment/([^/]+)/';
    1265                     $sub2tb = $sub2 . $trackbackregex;
    1266                     $sub2feed = $sub2 . $feedregex;
    1267                     $sub2feed2 = $sub2 . $feedregex2;
    1268                     $sub2 .= '?$';
    1269                     $subquery = $index . '?attachment=' . $this->preg_index(1);
    1270                     $subtbquery = $subquery . '&tb=1';
    1271                     $subfeedquery = $subquery . '&feed=' . $this->preg_index(2);
    1272                     $match = $match . '(/[0-9]+)?/?$';
    1273                     $query = $index . '?' . $query . '&page=' . $this->preg_index($num_toks + 1);
    1274                 } else {
    1275                     $match .= '?$';
    1276                     $query = $index . '?' . $query;
    1277                 }
    1278                        
    1279                 $rewrite = array_merge($rewrite, array($match => $query));
    1280 
    1281                 if ($post) {
    1282                     $rewrite = array_merge(array($trackbackmatch => $trackbackquery), $rewrite);
    1283                     if ( ! $page )
    1284                         $rewrite = array_merge($rewrite, array($sub1 => $subquery, $sub1tb => $subtbquery, $sub1feed => $subfeedquery, $sub1feed2 => $subfeedquery));
    1285                     $rewrite = array_merge($rewrite, array($sub2 => $subquery, $sub2tb => $subtbquery, $sub2feed => $subfeedquery, $sub2feed2 => $subfeedquery));
    1286                 }
    1287             }
    1288             $post_rewrite = array_merge($rewrite, $post_rewrite);
    1289         }
    1290         return $post_rewrite;
    1291     }
    1292 
    1293     function generate_rewrite_rule($permalink_structure, $walk_dirs = false) {
    1294         return $this->generate_rewrite_rules($permalink_structure, false, false, false, $walk_dirs);
    1295     }
    1296 
    1297     /* rewrite_rules
    1298      * Construct rewrite matches and queries from permalink structure.
    1299      * Returns an associate array of matches and queries.
    1300      */
    1301     function rewrite_rules() {
    1302         $rewrite = array();
    1303 
    1304         if (empty($this->permalink_structure)) {
    1305             return $rewrite;
    1306         }
    1307 
    1308         // Post
    1309         $post_rewrite = $this->generate_rewrite_rules($this->permalink_structure);
    1310         $post_rewrite = apply_filters('post_rewrite_rules', $post_rewrite);
    1311 
    1312         // Date
    1313         $date_rewrite = $this->generate_rewrite_rules($this->get_date_permastruct());
    1314         $date_rewrite = apply_filters('date_rewrite_rules', $date_rewrite);
    1315 
    1316         // Root
    1317         $root_rewrite = $this->generate_rewrite_rules($this->root . '/');
    1318         $root_rewrite = apply_filters('root_rewrite_rules', $root_rewrite);
    1319 
    1320         // Comments
    1321         $comments_rewrite = $this->generate_rewrite_rules($this->root . $this->comments_base, true, true, true, false);
    1322         $comments_rewrite = apply_filters('comments_rewrite_rules', $comments_rewrite);
    1323 
    1324         // Search
    1325         $search_structure = $this->get_search_permastruct();
    1326         $search_rewrite = $this->generate_rewrite_rules($search_structure);
    1327         $search_rewrite = apply_filters('search_rewrite_rules', $search_rewrite);
    1328 
    1329         // Categories
    1330         $category_rewrite = $this->generate_rewrite_rules($this->get_category_permastruct());
    1331         $category_rewrite = apply_filters('category_rewrite_rules', $category_rewrite);
    1332 
    1333         // Authors
    1334         $author_rewrite = $this->generate_rewrite_rules($this->get_author_permastruct());
    1335         $author_rewrite = apply_filters('author_rewrite_rules', $author_rewrite);
    1336 
    1337         // Pages
    1338         $page_rewrite = $this->page_rewrite_rules();
    1339         $page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite);
    1340 
    1341         // Put them together.
    1342         $this->rules = array_merge($page_rewrite, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $author_rewrite, $date_rewrite, $post_rewrite);
    1343 
    1344         do_action('generate_rewrite_rules', array(&$this));
    1345         $this->rules = apply_filters('rewrite_rules_array', $this->rules);
    1346 
    1347         return $this->rules;
    1348     }
    1349 
    1350     function wp_rewrite_rules() {
    1351         $this->rules = get_option('rewrite_rules');
    1352         if ( empty($this->rules) ) {
    1353             $this->matches = 'matches';
    1354             $this->rewrite_rules();
    1355             update_option('rewrite_rules', $this->rules);
    1356         }
    1357 
    1358         return $this->rules;
    1359     }
    1360 
    1361     function mod_rewrite_rules() {
    1362         if ( ! $this->using_permalinks()) {
    1363             return '';
    1364         }
    1365 
    1366         $site_root = parse_url(get_settings('siteurl'));
    1367         $site_root = trailingslashit($site_root['path']);
    1368 
    1369         $home_root = parse_url(get_settings('home'));
    1370         $home_root = trailingslashit($home_root['path']);
    1371    
    1372         $rules = "<IfModule mod_rewrite.c>\n";
    1373         $rules .= "RewriteEngine On\n";
    1374         $rules .= "RewriteBase $home_root\n";
    1375 
    1376         if ($this->use_verbose_rules) {
    1377             $this->matches = '';
    1378             $rewrite = $this->rewrite_rules();
    1379             $num_rules = count($rewrite);
    1380             $rules .= "RewriteCond %{REQUEST_FILENAME} -f [OR]\n" .
    1381                 "RewriteCond %{REQUEST_FILENAME} -d\n" .
    1382                 "RewriteRule ^.*$ - [S=$num_rules]\n";
    1383 
    1384             foreach ($rewrite as $match => $query) {
    1385                 // Apache 1.3 does not support the reluctant (non-greedy) modifier.
    1386                 $match = str_replace('.+?', '.+', $match);
    1387 
    1388                 // If the match is unanchored and greedy, prepend rewrite conditions
    1389                 // to avoid infinite redirects and eclipsing of real files.
    1390                 if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) {
    1391                     //nada.
    1392                 }
    1393 
    1394                 if (strstr($query, $this->index)) {
    1395                     $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n";
    1396                 } else {
    1397                     $rules .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA,L]\n";
    1398                 }
    1399             }
    1400         } else {
    1401             $rules .= "RewriteCond %{REQUEST_FILENAME} !-f\n" .
    1402                 "RewriteCond %{REQUEST_FILENAME} !-d\n" .
    1403                 "RewriteRule . {$home_root}{$this->index} [L]\n";
    1404         }
    1405 
    1406         $rules .= "</IfModule>\n";
    1407 
    1408         $rules = apply_filters('mod_rewrite_rules', $rules);
    1409         $rules = apply_filters('rewrite_rules', $rules);  // Deprecated
    1410 
    1411         return $rules;
    1412     }
    1413 
    1414     function flush_rules() {
    1415         generate_page_uri_index();
    1416         delete_option('rewrite_rules');
    1417         $this->wp_rewrite_rules();
    1418         if ( function_exists('save_mod_rewrite_rules') )
    1419             save_mod_rewrite_rules();
    1420     }
    1421 
    1422     function init() {
    1423         $this->permalink_structure = get_settings('permalink_structure');
    1424         $this->front = substr($this->permalink_structure, 0, strpos($this->permalink_structure, '%'));
    1425         $this->root = '';
    1426         if ($this->using_index_permalinks()) {
    1427             $this->root = $this->index . '/';
    1428         }
    1429         $this->category_base = get_settings('category_base');
    1430         unset($this->category_structure);
    1431         unset($this->author_structure);
    1432         unset($this->date_structure);
    1433         unset($this->page_structure);
    1434         unset($this->search_structure);
    1435         unset($this->feed_structure);
    1436         unset($this->comment_feed_structure);
    1437     }
    1438 
    1439     function set_permalink_structure($permalink_structure) {
    1440         if ($permalink_structure != $this->permalink_structure) {
    1441             update_option('permalink_structure', $permalink_structure);
    1442             $this->init();
    1443         }
    1444     }
    1445 
    1446     function set_category_base($category_base) {
    1447         if ($category_base != $this->category_base) {
    1448             update_option('category_base', $category_base);
    1449             $this->init();
    1450         }
    1451     }
    1452 
    1453     function WP_Rewrite() {
    1454         $this->init();
    1455     }
    1456 }
    1457 
    1458858class WP {
    1459859    var $public_query_vars = array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 's', 'search', 'exact', 'sentence', 'debug', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'comments_popup', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview');
     
    1468868    var $matched_query;
    1469869    var $did_permalink = false;
     870   
     871    function add_query_var($qv) {
     872        $this->public_query_vars[] = $qv;
     873    }
    1470874
    1471875    function parse_request($extra_query_vars = '') {
     
    1540944                    // Got a match.
    1541945                    $this->matched_rule = $match;
    1542 
     946                   
    1543947                    // Trim the query of everything up to the '?'.
    1544948                    $query = preg_replace("!^.+\?!", '', $query);
  • trunk/wp-includes/default-filters.php

    r3635 r3638  
    8989if(!defined('DOING_CRON'))
    9090    add_action('init', 'wp_cron');
     91add_action('do_feed_rdf', 'do_feed_rdf', 10, 1);
     92add_action('do_feed_rss', 'do_feed_rss', 10, 1);
     93add_action('do_feed_rss2', 'do_feed_rss2', 10, 1);
     94add_action('do_feed_atom', 'do_feed_atom', 10, 1);
    9195?>
  • trunk/wp-includes/functions.php

    r3634 r3638  
    22412241function load_template($file) {
    22422242    global $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query,
    2243         $wp_rewrite, $wpdb;
     2243        $wp_rewrite, $wpdb, $wp_version, $wp;
    22442244
    22452245    extract($wp_query->query_vars);
     
    24352435    return 0;
    24362436}
     2437
     2438function do_feed() {
     2439    $feed = get_query_var('feed');
     2440
     2441    // Remove the pad, if present.
     2442    $feed = preg_replace('/^_+/', '', $feed);
     2443
     2444    if ($feed == '' || $feed == 'feed')
     2445        $feed = 'rss2';
     2446
     2447    $for_comments = false;
     2448    if ( is_single() || ($withcomments == 1) ) {
     2449        $feed = 'rss2';
     2450        $for_comments = true;   
     2451    }
     2452
     2453    $hook = 'do_feed_' . $feed;
     2454    do_action($hook, $for_comments);
     2455}
     2456
     2457function do_feed_rdf() {
     2458    load_template(ABSPATH . 'wp-rdf.php');
     2459}
     2460
     2461function do_feed_rss() {
     2462    load_template(ABSPATH . 'wp-rss.php');
     2463}
     2464
     2465function do_feed_rss2($for_comments) {
     2466    if ( $for_comments )
     2467        load_template(ABSPATH . 'wp-commentsrss2.php');
     2468    else
     2469        load_template(ABSPATH . 'wp-rss2.php');
     2470}
     2471
     2472function do_feed_atom() {
     2473    load_template(ABSPATH . 'wp-atom.php');
     2474}
    24372475?>
  • trunk/wp-includes/template-loader.php

    r3517 r3638  
    33    do_action('template_redirect');
    44    if ( is_feed() ) {
    5         include(ABSPATH . '/wp-feed.php');
     5        do_feed();
    66        exit;
    77    } else if ( is_trackback() ) {
     
    5757    // Process feeds and trackbacks even if not using themes.
    5858    if ( is_feed() ) {
    59         include(ABSPATH . '/wp-feed.php');
     59        do_feed();
    6060        exit;
    6161    } else if ( is_trackback() ) {
  • trunk/wp-rss2.php

    r3227 r3638  
    5252    <?php do_action('rss2_item'); ?>
    5353    </item>
    54     <?php $items_count++; if (($items_count == get_settings('posts_per_rss')) && empty($m)) { break; } } } ?>
     54    <?php $items_count++; if (($items_count == get_settings('posts_per_rss')) && !is_date()) { break; } } } ?>
    5555</channel>
    5656</rss>
  • trunk/wp-settings.php

    r3634 r3638  
    141141require (ABSPATH . WPINC . '/template-functions-category.php');
    142142require (ABSPATH . WPINC . '/comment-functions.php');
     143require (ABSPATH . WPINC . '/rewrite.php');
    143144require (ABSPATH . WPINC . '/feed-functions.php');
    144145require (ABSPATH . WPINC . '/template-functions-bookmarks.php');
Note: See TracChangeset for help on using the changeset viewer.