diff --git a/wp-includes/class-wp-rewrite.php b/wp-includes/class-wp-rewrite.php index 5f7bbb2340..84a57c8107 100644 --- a/wp-includes/class-wp-rewrite.php +++ b/wp-includes/class-wp-rewrite.php @@ -1510,24 +1510,34 @@ class WP_Rewrite { * the top of the rules. * * @since 2.1.0 + * @since 4.4.0 Array support was added to the `$redirect` parameter. * @access public * - * @param string $regex Regular expression to match against request. - * @param string $redirect URL regex redirects to when regex matches request. - * @param string $after Optional, default is bottom. Location to place rule. + * @param string $regex Regular expression to match against request. + * @param string|array $redirect URL regex redirects to when regex matches request, or array + * of query vars and values. + * @param string $after Optional, default is bottom. Location to place rule. */ - public function add_rule($regex, $redirect, $after = 'bottom') { - //get everything up to the first ? - $index = (strpos($redirect, '?') === false ? strlen($redirect) : strpos($redirect, '?')); - $front = substr($redirect, 0, $index); - if ( $front != $this->index ) { //it doesn't redirect to WP's index.php - $this->add_external_rule($regex, $redirect); + public function add_rule( $regex, $redirect, $after = 'bottom' ) { + if ( is_array( $redirect ) ) { + $external = false; + $redirect = add_query_arg( $redirect, 'index.php' ); } else { - if ( 'bottom' == $after) - $this->extra_rules = array_merge($this->extra_rules, array($regex => $redirect)); - else - $this->extra_rules_top = array_merge($this->extra_rules_top, array($regex => $redirect)); - //$this->extra_rules[$regex] = $redirect; + $index = false === strpos( $redirect, '?' ) ? strlen( $redirect ) : strpos( $redirect, '?' ); + $front = substr( $redirect, 0, $index ); + + $external = $front != $this->index; + } + + // "external" = it doesn't redirect to index.php + if ( $external ) { + $this->add_external_rule( $regex, $redirect ); + } else { + if ( 'bottom' == $after ) { + $this->extra_rules = array_merge( $this->extra_rules, array( $regex => $redirect ) ); + } else { + $this->extra_rules_top = array_merge( $this->extra_rules_top, array( $regex => $redirect ) ); + } } } diff --git a/wp-includes/rewrite-functions.php b/wp-includes/rewrite-functions.php index ed085b7c22..9b5a4f90df 100644 --- a/wp-includes/rewrite-functions.php +++ b/wp-includes/rewrite-functions.php @@ -7,19 +7,21 @@ */ /** - * Add a straight rewrite rule. + * Adds a straight rewrite rule. * * @since 2.1.0 + * @since 4.4.0 Array support was added to the `$redirect` parameter. * - * @global WP_Rewrite $wp_rewrite + * @global WP_Rewrite $wp_rewrite WordPress Rewrite Component. * - * @param string $regex Regular Expression to match request against. - * @param string $redirect Page to redirect to. - * @param string $after Optional, default is 'bottom'. Where to add rule, can also be 'top'. + * @param string $regex Regular Expression to match request against. + * @param string|array $redirect Page to redirect to, or array of query vars and values. + * @param string $after Optional, default is 'bottom'. Where to add rule, can also be 'top'. */ -function add_rewrite_rule($regex, $redirect, $after = 'bottom') { +function add_rewrite_rule( $regex, $redirect, $after = 'bottom' ) { global $wp_rewrite; - $wp_rewrite->add_rule($regex, $redirect, $after); + + $wp_rewrite->add_rule( $regex, $redirect, $after ); } /** diff --git a/wp-includes/version.php b/wp-includes/version.php index 49cb6b4e58..fbd69eccdd 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.4-alpha-34707'; +$wp_version = '4.4-alpha-34708'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.