Changeset 34708
- Timestamp:
- 09/30/2015 01:10:03 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/class-wp-rewrite.php
r34492 r34708 1511 1511 * 1512 1512 * @since 2.1.0 1513 * @ access public1514 * 1515 * @param string $regex Regular expression to match against request.1516 * @param string $redirect URL regex redirects to when regex matchesrequest.1517 * @param string $after Optional, default is bottom. Location to place rule.1518 * /1519 public function add_rule($regex, $redirect, $after = 'bottom') {1520 //get everything up to the first ?1521 $index = (strpos($redirect, '?') === false ? strlen($redirect) : strpos($redirect, '?'));1522 $front = substr($redirect, 0, $index);1523 if ( $front != $this->index ) { //it doesn't redirect to WP's index.php1524 $ this->add_external_rule($regex, $redirect);1513 * @since 4.4.0 Array support was added to the `$redirect` parameter. 1514 * @access public 1515 * 1516 * @param string $regex Regular expression to match against request. 1517 * @param string|array $redirect URL regex redirects to when regex matches request, or array 1518 * of query vars and values. 1519 * @param string $after Optional, default is bottom. Location to place rule. 1520 */ 1521 public function add_rule( $regex, $redirect, $after = 'bottom' ) { 1522 if ( is_array( $redirect ) ) { 1523 $external = false; 1524 $redirect = add_query_arg( $redirect, 'index.php' ); 1525 1525 } else { 1526 if ( 'bottom' == $after) 1527 $this->extra_rules = array_merge($this->extra_rules, array($regex => $redirect)); 1528 else 1529 $this->extra_rules_top = array_merge($this->extra_rules_top, array($regex => $redirect)); 1530 //$this->extra_rules[$regex] = $redirect; 1526 $index = false === strpos( $redirect, '?' ) ? strlen( $redirect ) : strpos( $redirect, '?' ); 1527 $front = substr( $redirect, 0, $index ); 1528 1529 $external = $front != $this->index; 1530 } 1531 1532 // "external" = it doesn't redirect to index.php 1533 if ( $external ) { 1534 $this->add_external_rule( $regex, $redirect ); 1535 } else { 1536 if ( 'bottom' == $after ) { 1537 $this->extra_rules = array_merge( $this->extra_rules, array( $regex => $redirect ) ); 1538 } else { 1539 $this->extra_rules_top = array_merge( $this->extra_rules_top, array( $regex => $redirect ) ); 1540 } 1531 1541 } 1532 1542 } -
trunk/src/wp-includes/rewrite-functions.php
r34566 r34708 8 8 9 9 /** 10 * Add a straight rewrite rule.10 * Adds a straight rewrite rule. 11 11 * 12 12 * @since 2.1.0 13 * 14 * @global WP_Rewrite $wp_rewrite 15 * 16 * @param string $regex Regular Expression to match request against. 17 * @param string $redirect Page to redirect to. 18 * @param string $after Optional, default is 'bottom'. Where to add rule, can also be 'top'. 19 */ 20 function add_rewrite_rule($regex, $redirect, $after = 'bottom') { 21 global $wp_rewrite; 22 $wp_rewrite->add_rule($regex, $redirect, $after); 13 * @since 4.4.0 Array support was added to the `$redirect` parameter. 14 * 15 * @global WP_Rewrite $wp_rewrite WordPress Rewrite Component. 16 * 17 * @param string $regex Regular Expression to match request against. 18 * @param string|array $redirect Page to redirect to, or array of query vars and values. 19 * @param string $after Optional, default is 'bottom'. Where to add rule, can also be 'top'. 20 */ 21 function add_rewrite_rule( $regex, $redirect, $after = 'bottom' ) { 22 global $wp_rewrite; 23 24 $wp_rewrite->add_rule( $regex, $redirect, $after ); 23 25 } 24 26 -
trunk/tests/phpunit/tests/rewrite.php
r34215 r34708 32 32 } 33 33 34 /** 35 * @ticket 16840 36 */ 37 public function test_add_rule() { 38 global $wp_rewrite; 39 40 $pattern = 'path/to/rewrite/([^/]+)/?$'; 41 $redirect = 'index.php?test_var1=$matches[1]&test_var2=1'; 42 43 $wp_rewrite->add_rule( $pattern, $redirect ); 44 45 $wp_rewrite->flush_rules(); 46 47 $rewrite_rules = $wp_rewrite->rewrite_rules(); 48 49 $this->assertSame( $redirect, $rewrite_rules[ $pattern ] ); 50 } 51 52 /** 53 * @ticket 16840 54 */ 55 public function test_add_rule_redirect_array() { 56 global $wp_rewrite; 57 58 $pattern = 'path/to/rewrite/([^/]+)/?$'; 59 $redirect = 'index.php?test_var1=$matches[1]&test_var2=1'; 60 61 $wp_rewrite->add_rule( $pattern, array( 62 'test_var1' => '$matches[1]', 63 'test_var2' => '1' 64 ) ); 65 66 $wp_rewrite->flush_rules(); 67 68 $rewrite_rules = $wp_rewrite->rewrite_rules(); 69 70 $this->assertSame( $redirect, $rewrite_rules[ $pattern ] ); 71 } 72 73 /** 74 * @ticket 16840 75 */ 76 public function test_add_rule_top() { 77 global $wp_rewrite; 78 79 $pattern = 'path/to/rewrite/([^/]+)/?$'; 80 $redirect = 'index.php?test_var1=$matches[1]&test_var2=1'; 81 82 $wp_rewrite->add_rule( $pattern, $redirect, 'top' ); 83 84 $wp_rewrite->flush_rules(); 85 86 $extra_rules_top = $wp_rewrite->extra_rules_top; 87 88 $this->assertContains( $redirect, $extra_rules_top[ $pattern ] ); 89 } 90 34 91 function test_url_to_postid() { 35 92
Note: See TracChangeset
for help on using the changeset viewer.