2

I've got an issue, writing a correct rewrite rule.

Basically, here are the examples of the url I want :

/myPage/mySuPage

Then the same with pagination
/myPage/mySuPage/page/3

Then, the basic page, with 2 params, no pagination
/myPage/mySuPage/param1/param2

Then, the one with 2 parameters and the pagination
/myPage/mySuPage/param1/param2/page/3

More or less, i have it working with differents rules for each case, but if I put them in a row, nothing works.

Here are the rules I wrote :

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)/?',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]',
    'top' );

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)/page/([0-9]{1,})?',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]&pageds=$matches[3]',
    'top' );


add_rewrite_rule(
    'myPage/mySuPage/(.+?)(/page/([0-9]+))?/?$',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]',
    'top' );

1 Answer 1

6

Your first two rewrite rules do not end with $, which indicates that the URL should stop there. So myPage/mySuPage/param1/param2/page/3 would still be matched by the first pattern, because it can just ignored the /page/3 part at the end. The next rewrite rules will then never be used.

With my Rewrite analyzer plugin I was able to simplify your rewrite rules to these two: one without params and just optional paging, and one with params and optional paging. Combining these two into one did not work because the optional params woud "eat" the paging part.

add_rewrite_rule(
    'myPage/mySuPage(/page/([0-9]+)?)?/?$',
    'index.php?pagename=myPage/mySuPage&pageds=$matches[2]',
    'top'
);

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)(/page/([0-9]+)?)?/?$',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]&pageds=$matches[4]',
    'top'
);
4
  • Wahou, thank you very much Jan. It works perfectly now. I didn't knew about the "optional". I'm using your plugin, but i guess this was too "complex" for me.
    – Ludo
    May 30, 2011 at 10:01
  • @Ludo: Glad I could help! If this solved your problem, you can click the checkbox to mark the answer as accepted. This will also remove the question from the "unanswered" list.
    – Jan Fabry
    May 30, 2011 at 10:15
  • is there a reason paged has an 's' on the end of it? Aug 18, 2012 at 13:18
  • @MannyFleurmond: I think I just took the original rules from the question, and did not check the parameters. It is possible that pageds is a parameter that is handled by his own code.
    – Jan Fabry
    Aug 18, 2012 at 20:00

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.