I have several pages set up in a hierarchy on my site. Currently the site’s pages and URLs look like this.
Page name | Current URL | Preferred URL
-----------------|----------------------------------------
Page AAA | /pageAAA/ | /pageAAA/
|-- Page BBB | /pageAAA/pageBBB/ | /pageBBB/
Page CCC | /pageCCC/ | /pageCCC/
Page DDD | /pageDDD/ | /pageDDD/
|-- Page EEE | /pageDDD/pageEEE/ | /pageEEE/
I would like to strip the page hierarchy from the URL and just use the page name instead. Currently this is not a problem for the “POSTS” as I have set the “Permalink” to /%postname%/
Edit: The reason that I want to do this is; I am importing a existing site into wordpress. The Existing site has a hierarchy for the pages (menu) but a flat url structure. I do not know if this has any added benefit for SEO but I want to keep the URL structure the same as the old site
I’d be curious if someone can find a better solution to this. Here’s what I came up with:
What I’m doing here is intercepting
parse_request
and if it’s a pagename request, and the pagename doesn’t have a “/” in it, then I check to see if I can find a post with the correct name. If I find a page, I set the query var, which allows the rest of the request chain to proceed as normal, because WordPress thinks the request is the full hierarchical one.You’d also want to add a filter to
post_type_link
so that your links are generated correctly (otherwise they’ll continue to be hierarchical).I wouldn’t change page permalink behavior. Much simpler/safer solution will be to set flat page hierarchy (if you really want it to be flat).
If you want to have hierarchy in menu, you can still have it – you can create custom menu and display it with
wp_nav_menu
function.As of wp 4.7, you would need to work around the parse_request: as
use_verbose_page_rules
is triggered andget_page_by_path
call checks thepage
parents and their presence in the url(!) – this unexpected core check could be avoided by adding an evil space as in https://github.com/weaveworks/wordepress/blob/master/plugin/wordepress/wordepress.php#L91This is, of course, very fragile and should be probably avoided 🙂
This presentation may contain a better answer but I was not able to comprehend it: https://www.slideshare.net/MikeSchinkel/hardcore-url-routing-2014?next_slideshow=1