Prevent non-public taxonomies from registering aquery var.

[34247] made the 'public' paramater of `register_taxonomy()` work by blocking
requests for non-public taxonomy archives during `parse_request()`. Blocking
taxonomy archive requests this late means that it's impossible to register an
independent query var that matches the slug of a non-public taxonomy. By
moving the block to `register_taxonomy()` - not allowing these taxonomies to
register their query vars in the first place - we free up the slug for other
use. In addition, we free up a bit of processing (no need to look for the query
var in `parse_request()` and better parallel the way non-public post types
work. See `register_post_type()`.

Non-public taxonomy archives that are requested using `?taxonomy=tax_name` are
still blocked during `parse_request`. It's only custom query vars -
`?tax_name=term` - that are affected by this change.

Props mboynes.
Fixes #21949.
Built from https://develop.svn.wordpress.org/trunk@35333


git-svn-id: http://core.svn.wordpress.org/trunk@35299 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Boone Gorges
2015-10-21 16:54:24 +00:00
parent 3fcb37a831
commit 9088df3fee
3 changed files with 6 additions and 8 deletions

View File

@@ -311,12 +311,10 @@ class WP {
// Don't allow non-public taxonomies to be queried from the front-end.
if ( ! is_admin() ) {
foreach ( get_taxonomies( array( 'public' => false ), 'objects' ) as $taxonomy => $t ) {
// Check first for taxonomy-specific query_var.
if ( $t->query_var && isset( $this->query_vars[ $t->query_var ] ) ) {
unset( $this->query_vars[ $t->query_var ] );
}
// Next, check the 'taxonomy' query_var.
/*
* Disallow when set to the 'taxonomy' query var.
* Non-public taxonomies cannot register custom query vars. See register_taxonomy().
*/
if ( isset( $this->query_vars['taxonomy'] ) && $taxonomy === $this->query_vars['taxonomy'] ) {
unset( $this->query_vars['taxonomy'], $this->query_vars['term'] );
}