Make WordPress Core

Opened 3 years ago

Last modified 13 months ago

#20171 new defect (bug)

Categories/Tags links are broken in WP 3.3.1, with multisite/subfolder install

Reported by: tszming Owned by:
Milestone: Future Release Priority: normal
Severity: normal Version: 3.1
Component: Permalinks Keywords: has-patch commit
Focuses: multisite Cc:


All the default categories/tags links are not working, showing error..

"This is somewhat embarrassing, isn’t it?"

Steps to reproduce:

  1. Install WP 3.3.1 on domain, e.g. http://blog.example.com
  2. Enable multi-site features, using subfolder instead of subdomain
  3. Create a site, e.g. http://blog.example.com/test1
  4. Create a post, e.g. http://blog.example.com/test1/2012/03/04/test1/
  5. Enter the default category link, e.g. http://blog.example.com/test1/category/uncategorized/

Now you will see the message: "This is somewhat embarrassing, isn’t it?"


  1. Enter this link: http://blog.example.com/test1/wp-admin/options-permalink.php
  2. Change nothing, press "Save Changes"
  3. Now you can view the link correctly: http://blog.example.com/test1/category/uncategorized/

The above issue also apply to tags

Attachments (2)

rewrite_init.diff (849 bytes) - added by duck_ 3 years ago.
20171.diff (1.1 KB) - added by nacin 17 months ago.

Download all attachments as: .zip

Change History (15)

comment:1 @scribu3 years ago

  • Component changed from Permalinks to Multisite
  • Keywords needs-patch added
  • Severity changed from blocker to normal

Seems like the permalinks are not flushed when creating a site.

comment:2 @duck_3 years ago

  • Version changed from 3.3.1 to 3.1

Rewrite rules are flushed during site creation, see wp_install_defaults().

The problem is that categories, tags and formats have already been registered with the "/blog/" prefix because they were registered during the init of the main site. So, when the rewrite rules are generated they have a different structure to the rest of the rules. I suspect that you encounter the same problem for any custom taxonomies/post types which register with_front as true.

In 3.1 it was only formats that had the problem. with_front => true was introduced for categories and tags in 3.1.1.

@duck_3 years ago

comment:3 @duck_3 years ago

I thought of maybe adding a "rewrite_init" action to WP_Rewrite::init() and hooking taxonomy registration onto that. So taxonomies are re-registered whenever the permalink structure is changed.

comment:4 follow-up: @scribu3 years ago

'rewrite_init' seems like a good idea. Any drawbacks to using it for general CPT and taxonomy registration?

comment:5 in reply to: ↑ 4 @duck_3 years ago

Replying to scribu:

'rewrite_init' seems like a good idea. Any drawbacks to using it for general CPT and taxonomy registration?

None that I have found so far.

Related #20174.

comment:6 @duck_19 months ago

#24585 was marked as a duplicate.

comment:7 @duck_19 months ago

  • Milestone changed from Awaiting Review to 3.7

Moving to 3.7 for review per #24585.

comment:9 @DrewAPicture17 months ago

  • Keywords has-patch needs-docs added; needs-patch removed

rewrite_init.diff still applies to current trunk. This new action will need docs if we decide to move on it for 3.7.

@nacin17 months ago

comment:10 @nacin17 months ago

  • Keywords commit added; needs-docs removed
  • Milestone changed from 3.7 to 3.8

comment:11 @jeremyfelt16 months ago

Tested 20171.diff against current trunk and all works as expected.

comment:12 @nacin15 months ago

  • Milestone changed from 3.8 to Future Release

I like this but there are going to be some side effects. For one, WP_Rewrite is init'd well before the init hook, including before the locale is loaded. We could do it on both 'rewrite_init' and 'init', but at that point, we're firing create_initial_taxonomies() *three* times on bootstrap. Maybe we attach it to rewrite_init only after init() runs once.

This needs more testing and careful consideration.

comment:13 @jeremyfelt13 months ago

  • Component changed from Multisite to Permalinks
  • Focuses multisite added
Note: See TracTickets for help on using tickets.