WordPress.org

Make WordPress Core

Ticket #34491: 34491.3.patch

File 34491.3.patch, 7.8 KB (added by Chouby, 5 years ago)
  • src/wp-includes/class-wp.php

     
    319319                        if ( $t->query_var && isset( $this->query_vars[$t->query_var] ) )
    320320                                $this->query_vars[$t->query_var] = str_replace( ' ', '+', $this->query_vars[$t->query_var] );
    321321
    322                 // Don't allow non-public taxonomies to be queried from the front-end.
     322                // Don't allow non-publicly queryable taxonomies to be queried from the front-end.
    323323                if ( ! is_admin() ) {
    324                         foreach ( get_taxonomies( array( 'public' => false ), 'objects' ) as $taxonomy => $t ) {
     324                        foreach ( get_taxonomies( array( 'publicly_queryable' => false ), 'objects' ) as $taxonomy => $t ) {
    325325                                /*
    326326                                 * Disallow when set to the 'taxonomy' query var.
    327                                  * Non-public taxonomies cannot register custom query vars. See register_taxonomy().
     327                                 * Non-publicly queryable taxonomies cannot register custom query vars. See register_taxonomy().
    328328                                 */
    329329                                if ( isset( $this->query_vars['taxonomy'] ) && $taxonomy === $this->query_vars['taxonomy'] ) {
    330330                                        unset( $this->query_vars['taxonomy'], $this->query_vars['term'] );
  • src/wp-includes/taxonomy.php

     
    288288 *                                                taxonomies. See accepted values in get_taxonomy_labels().
    289289 *                                                Default empty array.
    290290 *     @type string        $description           A short descriptive summary of what the taxonomy is for. Default empty.
    291  *     @type bool          $public                Whether the taxonomy is publicly queryable. Default true.
     291 *     @type bool          $public                Whether a taxonomy is intended for use publicly either via
     292 *                                                the admin interface or by front-end users. While the default settings
     293 *                                                of `$publicly_queryable`, `$show_ui`, and `$show_in_nav_menus`
     294 *                                                are inherited from `$public`, each does not rely on this relationship
     295 *                                                and controls a very specific intention (default true).
     296 *     @type bool          $publicly_queryable    Whether the taxonomy is publicly queryable.
     297 *                                                If not set, the default is inherited from `$public`
    292298 *     @type bool          $hierarchical          Whether the taxonomy is hierarchical. Default false.
    293299 *     @type bool          $show_ui               Whether to generate and allow a UI for managing terms in this taxonomy in
    294300 *                                                the admin. If not set, the default is inherited from `$public`
     
    362368                'labels'                => array(),
    363369                'description'           => '',
    364370                'public'                => true,
     371                'publicly_queryable'    => null,
    365372                'hierarchical'          => false,
    366373                'show_ui'               => null,
    367374                'show_in_menu'          => null,
     
    383390                return new WP_Error( 'taxonomy_length_invalid', __( 'Taxonomy names must be between 1 and 32 characters in length.' ) );
    384391        }
    385392
    386         // Non-public taxonomies should not register query vars, except in the admin.
    387         if ( false !== $args['query_var'] && ( is_admin() || false !== $args['public'] ) && ! empty( $wp ) ) {
     393        // If not set, default to the setting for public.
     394        if ( null === $args['publicly_queryable'] ) {
     395                $args['publicly_queryable'] = $args['public'];
     396        }
     397
     398        // Non-publicly queryable taxonomies should not register query vars, except in the admin.
     399        if ( false !== $args['query_var'] && ( is_admin() || false !== $args['publicly_queryable'] ) && ! empty( $wp ) ) {
    388400                if ( true === $args['query_var'] )
    389401                        $args['query_var'] = $taxonomy;
    390402                else
  • tests/phpunit/includes/utils.php

     
    369369                unset( $GLOBALS[$v] );
    370370
    371371        foreach ( get_taxonomies( array() , 'objects' ) as $t ) {
    372                 if ( $t->public && ! empty( $t->query_var ) )
     372                if ( $t->publicly_queryable && ! empty( $t->query_var ) )
    373373                        $GLOBALS['wp']->add_query_var( $t->query_var );
    374374        }
    375375
     
    410410 */
    411411function benchmark_pcre_backtracking( $pattern, $subject, $strategy ) {
    412412        $saved_config = ini_get( 'pcre.backtrack_limit' );
    413        
     413
    414414        // Attempt to prevent PHP crashes.  Adjust these lower when needed.
    415415        if ( version_compare( phpversion(), '5.4.8', '>' ) ) {
    416416                $limit = 1000000;
     
    422422        for( $i = 4; $i <= $limit; $i *= 2 ) {
    423423
    424424                ini_set( 'pcre.backtrack_limit', $i );
    425                
     425
    426426                switch( $strategy ) {
    427427                case 'split':
    428428                        preg_split( $pattern, $subject );
  • tests/phpunit/tests/taxonomy.php

     
    446446        /**
    447447         * @ticket 21949
    448448         */
    449         public function test_nonpublic_taxonomy_should_not_be_queryable_using_taxname_query_var() {
     449        public function test_nonpublicly_queryable_taxonomy_should_not_be_queryable_using_taxname_query_var() {
    450450                register_taxonomy( 'wptests_tax', 'post', array(
    451                         'public' => false,
     451                        'publicly_queryable' => false,
    452452                ) );
    453453
    454454                $t = self::factory()->term->create_and_get( array(
     
    466466        /**
    467467         * @ticket 21949
    468468         */
    469         public function test_it_should_be_possible_to_register_a_query_var_that_matches_the_name_of_a_nonpublic_taxonomy() {
     469        public function test_it_should_be_possible_to_register_a_query_var_that_matches_the_name_of_a_nonpublicly_queryable_taxonomy() {
    470470                global $wp;
    471471
    472472                register_taxonomy( 'wptests_tax', 'post', array(
    473                         'public' => false,
     473                        'publicly_queryable' => false,
    474474                ) );
    475475                $t = $this->factory->term->create_and_get( array(
    476476                        'taxonomy' => 'wptests_tax',
     
    501501        /**
    502502         * @ticket 21949
    503503         */
    504         public function test_nonpublic_taxonomy_should_not_be_queryable_using_taxonomy_and_term_vars() {
     504        public function test_nonpublicly_queryable_taxonomy_should_not_be_queryable_using_taxonomy_and_term_vars() {
    505505                register_taxonomy( 'wptests_tax', 'post', array(
    506                         'public' => false,
     506                        'publicly_queryable' => false,
    507507                ) );
    508508
    509509                $t = self::factory()->term->create_and_get( array(
     
    519519        }
    520520
    521521        /**
     522         * @ticket 34491
     523         */
     524        public function test_public_taxonomy_should_be_publicly_queryable() {
     525                register_taxonomy( 'wptests_tax', 'post', array(
     526                        'public' => true,
     527                ) );
     528
     529                $this->assertContains( 'wptests_tax', get_taxonomies( array( 'publicly_queryable' => true ) ) );
     530
     531                $t = self::factory()->term->create_and_get( array(
     532                        'taxonomy' => 'wptests_tax',
     533                ) );
     534
     535                $p = self::factory()->post->create();
     536                wp_set_object_terms( $p, $t->slug, 'wptests_tax' );
     537
     538                $this->go_to( '/?wptests_tax=' . $t->slug );
     539
     540                $this->assertTrue( is_tax( 'wptests_tax' ) );
     541        }
     542
     543        /**
     544         * @ticket 34491
     545         */
     546        public function test_private_taxonomy_should_not_be_publicly_queryable() {
     547                register_taxonomy( 'wptests_tax', 'post', array(
     548                        'public' => false,
     549                ) );
     550
     551                $this->assertContains( 'wptests_tax', get_taxonomies( array( 'publicly_queryable' => false ) ) );
     552
     553                $t = self::factory()->term->create_and_get( array(
     554                        'taxonomy' => 'wptests_tax',
     555                ) );
     556
     557                $p = self::factory()->post->create();
     558                wp_set_object_terms( $p, $t->slug, 'wptests_tax' );
     559
     560                $this->go_to( '/?wptests_tax=' . $t->slug );
     561
     562                $this->assertFalse( is_tax( 'wptests_tax' ) );
     563        }
     564
     565        /**
    522566         * @ticket 35089
    523567         */
    524568        public function test_query_var_should_be_forced_to_false_for_non_public_taxonomy() {