I know there are several topics about URL rewriting in Wordpress but none of the topics I found helped me.

I want to rewrite the URL

profile/?person=abc (which works fine, but isn't pretty)



This is what I added to the functions.php of my theme:

function add_rewrite_rules() {
    global $wp_rewrite;
    add_rewrite_rule('profile/([^/]+)/?$', 'index.php?pagename=profile&person=$matches[1]', 'top');
add_action('init', 'add_rewrite_rules');

function add_query_vars() {
    global $wp;
add_action('init', 'add_query_vars');

When I try to call


Wordpress just changes the URL to


Of course 'person' is not among the query vars when I try to access them.

I also tried to write everything in one function (which shouldn't make any difference) and to add the query var 'person' to the query array with the query_vars filter hook:

function add_query_vars($q) {
    $q[] = 'person';
    return $q;
add_filter('query_vars', 'add_query_vars');

From everything I've read about URL rewriting with WP my code should work. I also tried deactivating all other plugins so nothing could interfere.


Since I can't answer my question because of my reputation I write the solution here:

The reason was that I tried to redirect to a child page. I left that piece of information out in my code above because I thought it was unimportant, but in fact it was the reason for my issue. Sorry for that, I just wanted to clean my code up a bit :-/

The line that got it all working:

add_rewrite_rule('persons/profile/([^/]+)/?$', 'index.php?pagename=persons/profile&person=$matches[1]', 'top');

What I don't understand is why I didn't get any error messages (WP_DEBUG was set to true) and got redirected to the right page (just without query parameter).

  • have you refreshed the rewrite rules? in your code it says it is set to false, another way of doing this is by saving the permalinks again on admin > settings> permalinks even without changing anything.. Jun 7, 2013 at 14:27
  • Yes, I did that. The rewrite rule itself seems to work, but it ignores the added query_var.
    – Fabian
    Jun 7, 2013 at 14:30
  • i am using the code from here: wordpress.stackexchange.com/questions/39500/… and it works.. see the function mmp_rewrite_rules and i can make the query var work. another thing, is your profile a custom post type? didn't you just add the 'query_var' => 'person' args when registering that post type? Jun 7, 2013 at 14:33
  • btw i am having a problem with rewrite too.. see wordpress.stackexchange.com/questions/102246/… ;P Jun 7, 2013 at 14:33
  • The filter rewrite_rules_array doesn't work for me. That was the first thing I tried but it never entered the callback function. I also found that newer tutorials and documents about rewrite rules didn't use that filter anymore. I'm using WP 3.5.1. if that makes any difference.
    – Fabian
    Jun 7, 2013 at 14:39


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.