okay i have made my own rewrite rule, with the add_rewrite_rule function in wordpress to get a custom url, for an plugin page.

add_action( 'init', function() {

  add_rewrite_rule( 'login/?$', 'index.php?function=login', 'top' );
  add_rewrite_rule( 'login/([a-zA-Z0-9]+)/?$', 'index.php?function=login&id=$matches[1]', 'top' );


add_filter( 'query_vars', function($query_vars) {

  $query_vars[] = 'function';
  $query_vars[] = 'id';
  return $query_vars;


This works great and i can visit the page [domainname.com]/login to visit the page. Now the problem how do i best get a propper permalink for this page, one that works both with rewrite rules turned on, and off.

I tried using the get_permalink() function, and that works with pages, post on other stuff, but is there a function working in similar fashion that can get custom url's like this?

1 Answer 1


No, there is no permalink. Because it's a bespoke URL there's nothing to latch on to. You'd need to generate such a function yourself from scratch.

Luckily, your URL is just the word login/ with an ID on the end, so when you need a URL, just write out login/ and put the ID on the end. Wrap it in a call to site_url to change it from a relative path to an absolute path.

For the non-pretty version, just take the 'index.php?function=login&id=$matches[1]' and swap $matches[1] for the ID you want.

  • Thanks for the answer, and yeah that would work. but how would go around to make a function that instead would give a more "beautiful" url as the one you get from the get_permalink function
    – bymem
    Commented Sep 17, 2020 at 10:05
  • Pretty much the same method, substitution, the only magic part of this was site_url which takes bananas and turns it into example.com/bananas where example.com is the root URL of the site, site_url isn't even a part of the rewrite rules API. Everything else is just joining up strings, beginner level PHP
    – Tom J Nowell
    Commented Sep 17, 2020 at 10:29

Your Answer

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

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