How does wordpress keep track of post id when post id is not used in permalinks?

Extending @Howdy_McGee answer.

  1. First you can not have two post with the same slug (Not title) which explained already in other answers.
  2. Second you can have page and post with same slug. But you will be able to access only page when your permalink structure is /%postname%/. And there is debate going on this ticket#13459 about this issue/feature since 6 years :P.

When a request is made WordPress extract the request URI and match with the permalink structure in function parse_request(). If a match is found then query_vars are filled and this information is passed to WP_Query class where actual SQL is prepared and perform to display the result.

In case of page If it is page WordPress uses get_page_by_path and retrieve the ID of page to use in SQL query.

In case of post If it is a post then WordPress uses slug of post in SQL.

In short WordPress does not required post ID (Not in page) when permalink structure is set to /%postname%/ it uses the post slug to query database.

Therefore, with same slug of post/page a page is displayed first because with two matches WP check for page request first.

Leave a Comment