Make WordPress Core


Ignore:
Timestamp:
09/16/2015 07:04:57 PM (10 years ago)
Author:
boonebgorges
Message:

Allow taxonomies to be non-public.

[13216] introduced the 'public' argument for register_taxonomy(). This param
was used to set defaults for 'show_ui' and a number of other params, but it
never did anything itself.

With this changeset, taxonomies registered with public=false will no longer
be queryable on the front end, ie via taxonomy archive queries.

Props wpsmith, ocean90, nacin, ericlewis, boonebgorges.
Fixes #21949.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp.php

    r34215 r34247  
    300300            if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) )
    301301                $this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] );
     302
     303        // Don't allow non-public taxonomies to be queried from the front-end.
     304        if ( ! is_admin() ) {
     305            foreach ( get_taxonomies( array( 'public' => false ), 'objects' ) as $taxonomy => $t ) {
     306                // Check first for taxonomy-specific query_var.
     307                if ( $t->query_var && isset( $this->query_vars[ $t->query_var ] ) ) {
     308                    unset( $this->query_vars[ $t->query_var ] );
     309                }
     310
     311                // Next, check the 'taxonomy' query_var.
     312                if ( isset( $this->query_vars['taxonomy'] ) && $taxonomy === $this->query_vars['taxonomy'] ) {
     313                    unset( $this->query_vars['taxonomy'], $this->query_vars['term'] );
     314                }
     315            }
     316        }
    302317
    303318        // Limit publicly queried post_types to those that are publicly_queryable
Note: See TracChangeset for help on using the changeset viewer.