Changeset 1908 for trunk/wp-includes/functions.php
- Timestamp:
- 12/03/2004 02:38:11 AM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/functions.php
r1900 r1908 1306 1306 } 1307 1307 1308 function using_index_permalinks($permalink_structure = '') {1309 if (empty($permalink_structure)) {1310 $permalink_structure = get_settings('permalink_structure');1311 1312 if (empty($permalink_structure)) {1313 return false;1314 }1315 }1316 1317 // If the index is not in the permalink, we're using mod_rewrite.1318 if (preg_match('#^/*index.php#', $permalink_structure)) {1319 return true;1320 }1321 1322 return false;1323 }1324 1325 function preg_index($number, $matches = '') {1326 $match_prefix = '$';1327 $match_suffix = '';1328 1329 if (! empty($matches)) {1330 $match_prefix = '$' . $matches . '[';1331 $match_suffix = ']';1332 }1333 1334 return "$match_prefix$number$match_suffix";1335 }1336 1337 1338 1308 function get_page_uri($page) { 1339 1309 global $wpdb; … … 1353 1323 1354 1324 return $uri; 1355 }1356 1357 function page_rewrite_rules() {1358 $uris = get_settings('page_uris');1359 1360 $rewrite_rules = array();1361 if( is_array( $uris ) )1362 {1363 foreach ($uris as $uri => $pagename) {1364 $rewrite_rules += array($uri . '/?$' => "index.php?pagename=" . urldecode($pagename));1365 }1366 }1367 1368 return $rewrite_rules;1369 }1370 1371 function get_date_permastruct($permalink_structure = '') {1372 if (empty($permalink_structure)) {1373 $permalink_structure = get_settings('permalink_structure');1374 1375 if (empty($permalink_structure)) {1376 return false;1377 }1378 }1379 1380 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));1381 // The date permalink must have year, month, and day separated by slashes.1382 $endians = array('%year%/%monthnum%/%day%', '%day%/%monthnum%/%year%', '%monthnum%/%day%/%year%');1383 1384 $date_structure = '';1385 1386 foreach ($endians as $endian) {1387 if (false !== strpos($permalink_structure, $endian)) {1388 $date_structure = $front . $endian;1389 break;1390 }1391 }1392 1393 if (empty($date_structure)) {1394 $date_structure = $front . '%year%/%monthnum%/%day%';1395 }1396 1397 return $date_structure;1398 }1399 1400 function get_year_permastruct($permalink_structure = '') {1401 $structure = get_date_permastruct($permalink_structure);1402 1403 if (empty($structure)) {1404 return false;1405 }1406 1407 $structure = str_replace('%monthnum%', '', $structure);1408 $structure = str_replace('%day%', '', $structure);1409 1410 $structure = preg_replace('#/+#', '/', $structure);1411 1412 return $structure;1413 }1414 1415 function get_month_permastruct($permalink_structure = '') {1416 $structure = get_date_permastruct($permalink_structure);1417 1418 if (empty($structure)) {1419 return false;1420 }1421 1422 $structure = str_replace('%day%', '', $structure);1423 1424 $structure = preg_replace('#/+#', '/', $structure);1425 1426 return $structure;1427 }1428 1429 function get_day_permastruct($permalink_structure = '') {1430 return get_date_permastruct($permalink_structure);1431 }1432 1433 function generate_rewrite_rules($permalink_structure = '', $matches = '', $forcomments = false) {1434 $rewritecode =1435 array(1436 '%year%',1437 '%monthnum%',1438 '%day%',1439 '%hour%',1440 '%minute%',1441 '%second%',1442 '%postname%',1443 '%post_id%',1444 '%category%',1445 '%author%',1446 '%pagename%',1447 '%search%'1448 );1449 1450 $rewritereplace =1451 array(1452 '([0-9]{4})',1453 '([0-9]{1,2})',1454 '([0-9]{1,2})',1455 '([0-9]{1,2})',1456 '([0-9]{1,2})',1457 '([0-9]{1,2})',1458 '([^/]+)',1459 '([0-9]+)',1460 '(.+?)',1461 '([^/]+)',1462 '([^/]+)',1463 '(.+)'1464 );1465 1466 $queryreplace =1467 array (1468 'year=',1469 'monthnum=',1470 'day=',1471 'hour=',1472 'minute=',1473 'second=',1474 'name=',1475 'p=',1476 'category_name=',1477 'author_name=',1478 'pagename=',1479 's='1480 );1481 1482 $feedregex2 = '(feed|rdf|rss|rss2|atom)/?$';1483 $feedregex = 'feed/' . $feedregex2;1484 1485 $trackbackregex = 'trackback/?$';1486 $pageregex = 'page/?([0-9]{1,})/?$';1487 1488 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));1489 preg_match_all('/%.+?%/', $permalink_structure, $tokens);1490 1491 $num_tokens = count($tokens[0]);1492 1493 $index = 'index.php';1494 $feedindex = $index;1495 $trackbackindex = $index;1496 for ($i = 0; $i < $num_tokens; ++$i) {1497 if (0 < $i) {1498 $queries[$i] = $queries[$i - 1] . '&';1499 }1500 1501 $query_token = str_replace($rewritecode, $queryreplace, $tokens[0][$i]) . preg_index($i+1, $matches);1502 $queries[$i] .= $query_token;1503 }1504 1505 $structure = $permalink_structure;1506 if ($front != '/') {1507 $structure = str_replace($front, '', $structure);1508 }1509 $structure = trim($structure, '/');1510 $dirs = explode('/', $structure);1511 $num_dirs = count($dirs);1512 1513 $front = preg_replace('|^/+|', '', $front);1514 1515 $post_rewrite = array();1516 $struct = $front;1517 for ($j = 0; $j < $num_dirs; ++$j) {1518 $struct .= $dirs[$j] . '/';1519 $struct = ltrim($struct, '/');1520 $match = str_replace($rewritecode, $rewritereplace, $struct);1521 $num_toks = preg_match_all('/%.+?%/', $struct, $toks);1522 $query = $queries[$num_toks - 1];1523 1524 $pagematch = $match . $pageregex;1525 $pagequery = $index . '?' . $query . '&paged=' . preg_index($num_toks + 1, $matches);1526 1527 $feedmatch = $match . $feedregex;1528 $feedquery = $feedindex . '?' . $query . '&feed=' . preg_index($num_toks + 1, $matches);1529 1530 $feedmatch2 = $match . $feedregex2;1531 $feedquery2 = $feedindex . '?' . $query . '&feed=' . preg_index($num_toks + 1, $matches);1532 1533 if ($forcomments) {1534 $feedquery .= '&withcomments=1';1535 $feedquery2 .= '&withcomments=1';1536 }1537 1538 $rewrite = array($feedmatch => $feedquery, $feedmatch2 => $feedquery2, $pagematch => $pagequery);1539 1540 if ($num_toks) {1541 $post = 0;1542 if (strstr($struct, '%postname%') || strstr($struct, '%post_id%')1543 || (strstr($struct, '%year%') && strstr($struct, '%monthnum%') && strstr($struct, '%day%') && strstr($struct, '%hour%') && strstr($struct, '%minute') && strstr($struct, '%second%'))) {1544 $post = 1;1545 $trackbackmatch = $match . $trackbackregex;1546 $trackbackquery = $trackbackindex . '?' . $query . '&tb=1';1547 $match = $match . '?([0-9]+)?/?$';1548 $query = $index . '?' . $query . '&page=' . preg_index($num_toks + 1, $matches);1549 } else {1550 $match .= '?$';1551 $query = $index . '?' . $query;1552 }1553 1554 $rewrite = $rewrite + array($match => $query);1555 1556 if ($post) {1557 $rewrite = array($trackbackmatch => $trackbackquery) + $rewrite;1558 }1559 }1560 1561 $post_rewrite = $rewrite + $post_rewrite;1562 }1563 1564 return $post_rewrite;1565 }1566 1567 /* rewrite_rules1568 * Construct rewrite matches and queries from permalink structure.1569 * matches - The name of the match array to use in the query strings.1570 * If empty, $1, $2, $3, etc. are used.1571 * Returns an associate array of matches and queries.1572 */1573 function rewrite_rules($matches = '', $permalink_structure = '') {1574 $rewrite = array();1575 1576 if (empty($permalink_structure)) {1577 $permalink_structure = get_settings('permalink_structure');1578 1579 if (empty($permalink_structure)) {1580 return $rewrite;1581 }1582 }1583 1584 $front = substr($permalink_structure, 0, strpos($permalink_structure, '%'));1585 $index = 'index.php';1586 $prefix = '';1587 if (using_index_permalinks($permalink_structure)) {1588 $prefix = $index . '/';1589 }1590 1591 // Post1592 $post_rewrite = generate_rewrite_rules($permalink_structure, $matches);1593 1594 // Date1595 $date_rewrite = generate_rewrite_rules(get_date_permastruct($permalink_structure), $matches);1596 1597 // Root1598 $root_rewrite = generate_rewrite_rules($prefix . '/', $matches);1599 1600 // Comments1601 $comments_rewrite = generate_rewrite_rules($prefix . 'comments', $matches, true);1602 1603 // Search1604 $search_structure = $prefix . "search/%search%";1605 $search_rewrite = generate_rewrite_rules($search_structure, $matches);1606 1607 // Categories1608 if ( '' == get_settings('category_base') )1609 $category_structure = $front . 'category/';1610 else1611 $category_structure = get_settings('category_base') . '/';1612 1613 $category_structure = $category_structure . '%category%';1614 $category_rewrite = generate_rewrite_rules($category_structure, $matches);1615 1616 // Authors1617 $author_structure = $front . 'author/%author%';1618 $author_rewrite = generate_rewrite_rules($author_structure, $matches);1619 1620 // Pages1621 $page_rewrite = page_rewrite_rules();1622 1623 // Deprecated style static pages1624 $page_structure = $prefix . 'site/%pagename%';1625 $old_page_rewrite = generate_rewrite_rules($page_structure, $matches);1626 1627 // Put them together.1628 $rewrite = $page_rewrite + $root_rewrite + $comments_rewrite + $old_page_rewrite + $search_rewrite + $category_rewrite + $author_rewrite + $date_rewrite + $post_rewrite;1629 1630 $rewrite = apply_filters('rewrite_rules_array', $rewrite);1631 return $rewrite;1632 }1633 1634 function mod_rewrite_rules ($permalink_structure) {1635 $site_root = str_replace('http://', '', trim(get_settings('siteurl')));1636 $site_root = preg_replace('|([^/]*)(.*)|i', '$2', $site_root);1637 if ('/' != substr($site_root, -1)) $site_root = $site_root . '/';1638 1639 $home_root = str_replace('http://', '', trim(get_settings('home')));1640 $home_root = preg_replace('|([^/]*)(.*)|i', '$2', $home_root);1641 if ('/' != substr($home_root, -1)) $home_root = $home_root . '/';1642 1643 $rules = "<IfModule mod_rewrite.c>\n";1644 $rules .= "RewriteEngine On\n";1645 $rules .= "RewriteBase $home_root\n";1646 $rewrite = rewrite_rules('', $permalink_structure);1647 1648 $num_rules = count($rewrite);1649 $rules .= "RewriteCond %{REQUEST_FILENAME} -f [OR]\n" .1650 "RewriteCond %{REQUEST_FILENAME} -d\n" .1651 "RewriteRule ^.*$ - [S=$num_rules]\n";1652 1653 foreach ($rewrite as $match => $query) {1654 // Apache 1.3 does not support the reluctant (non-greedy) modifier.1655 $match = str_replace('.+?', '.+', $match);1656 1657 // If the match is unanchored and greedy, prepend rewrite conditions1658 // to avoid infinite redirects and eclipsing of real files.1659 if ($match == '(.+)/?$' || $match == '([^/]+)/?$' ) {1660 //nada.1661 }1662 1663 if (strstr($query, 'index.php')) {1664 $rules .= 'RewriteRule ^' . $match . ' ' . $home_root . $query . " [QSA,L]\n";1665 } else {1666 $rules .= 'RewriteRule ^' . $match . ' ' . $site_root . $query . " [QSA,L]\n";1667 }1668 }1669 $rules .= "</IfModule>\n";1670 1671 $rules = apply_filters('rewrite_rules', $rules);1672 1673 return $rules;1674 1325 } 1675 1326
Note: See TracChangeset
for help on using the changeset viewer.