WordPress.org

Make WordPress Core

Ticket #21760: 21760.12.patch

File 21760.12.patch, 4.7 KB (added by sstoqnov, 4 years ago)
  • src/wp-includes/class-wp-term-query.php

     
    474474                        $this->sql_clauses['where']['exclusions'] = preg_replace( '/^\s*AND\s*/', '', $exclusions );
    475475                }
    476476
    477                 if ( ! empty( $args['name'] ) ) {
     477                if (
     478                        ( ! empty( $args['name'] ) ) ||
     479                        ( is_string( $args['name'] ) && 0 !== strlen( $args['name'] ) )
     480                ) {
    478481                        $names = (array) $args['name'];
    479482                        foreach ( $names as &$_name ) {
    480483                                // `sanitize_term_field()` returns slashed data.
     
    484487                        $this->sql_clauses['where']['name'] = "t.name IN ('" . implode( "', '", array_map( 'esc_sql', $names ) ) . "')";
    485488                }
    486489
    487                 if ( ! empty( $args['slug'] ) ) {
     490                if (
     491                        ( ! empty( $args['slug'] ) ) ||
     492                        ( is_string( $args['slug'] ) && 0 !== strlen( $args['slug'] ) )
     493                ) {
    488494                        if ( is_array( $args['slug'] ) ) {
    489495                                $slug = array_map( 'sanitize_title', $args['slug'] );
    490496                                $this->sql_clauses['where']['slug'] = "t.slug IN ('" . implode( "', '", $slug ) . "')";
  • src/wp-includes/taxonomy.php

     
    835835                return false;
    836836        }
    837837
     838        if ( 'slug' === $field || 'name' === $field ) {
     839                $value = (string) $value;
     840
     841                if ( 0 === strlen( $value ) ) {
     842                        return false;
     843                }
     844        }
     845
    838846        if ( 'id' === $field || 'term_id' === $field ) {
    839847                $term = get_term( (int) $value, $taxonomy, $output, $filter );
    840848                if ( is_wp_error( $term ) || null === $term ) {
  • tests/phpunit/tests/term/getTermBy.php

     
    205205
    206206                $this->assertEquals( 0, $action->get_call_count() );
    207207        }
     208
     209        /**
     210         * @ticket 21760
     211         */
     212        public function test_get_term_by_name_with_string_0() {
     213                register_taxonomy( 'wptests_tax', 'post', array( 'hierarchical' => true ) );
     214
     215                $term_id = $this->factory->term->create( array(
     216                        'name'     => '0',
     217                        'taxonomy' => 'wptests_tax',
     218                ) );
     219
     220                $found = get_term_by( 'name', '0', 'wptests_tax' );
     221                $this->assertSame( $term_id, $found->term_id );
     222        }
     223
     224        /**
     225         * @ticket 21760
     226         */
     227        public function test_get_term_by_slug_with_string_0() {
     228                register_taxonomy( 'wptests_tax', 'post', array( 'hierarchical' => true ) );
     229
     230                $term_id = $this->factory->term->create( array(
     231                        'taxonomy' => 'wptests_tax',
     232                        'name'     => '0',
     233                        'slug'     => '0',
     234                ) );
     235
     236                $found = get_term_by( 'slug', '0', 'wptests_tax' );
     237                $this->assertSame( $term_id, $found->term_id );
     238        }
     239
     240        /**
     241         * @ticket 21760
     242         */
     243        public function test_get_term_by_with_empty_string() {
     244                register_taxonomy( 'wptests_tax', 'post', array( 'hierarchical' => true ) );
     245
     246                $found_by_slug = get_term_by( 'slug', '', 'wptests_tax' );
     247                $found_by_name = get_term_by( 'name', '', 'wptests_tax' );
     248
     249                $this->assertFalse( $found_by_slug );
     250                $this->assertFalse( $found_by_name );
     251        }
    208252}
  • tests/phpunit/tests/term/getTerms.php

     
    22232223                return 'foo';
    22242224        }
    22252225
     2226        /**
     2227         * @ticket 21760
     2228         */
     2229        public function test_with_term_slug_equal_to_string_0() {
     2230                register_taxonomy( 'wptests_tax', 'post', array( 'hierarchical' => true ) );
     2231
     2232                $term_id = self::factory()->term->create( array(
     2233                        'name' => '0',
     2234                        'slug' => '0',
     2235                        'taxonomy' => 'wptests_tax',
     2236                ) );
     2237
     2238                $found = get_terms( array(
     2239                        'taxonomy'   => 'wptests_tax',
     2240                        'hide_empty' => 0,
     2241                        'slug'       => '0',
     2242                ) );
     2243
     2244                $this->assertEqualSets( array( $term_id ), wp_list_pluck( $found, 'term_id' ) );
     2245        }
     2246
     2247        /**
     2248         * @ticket 21760
     2249         */
     2250        public function test_with_multiple_term_slugs_one_equal_to_string_0() {
     2251                register_taxonomy( 'wptests_tax', 'post', array( 'hierarchical' => true ) );
     2252
     2253                $term_id1 = self::factory()->term->create( array(
     2254                        'name'     => '0',
     2255                        'slug'     => '0',
     2256                        'taxonomy' => 'wptests_tax',
     2257                ) );
     2258
     2259                $term_id2 = self::factory()->term->create( array(
     2260                        'name'     => 'Test',
     2261                        'slug'     => 'test',
     2262                        'taxonomy' => 'wptests_tax',
     2263                ) );
     2264
     2265                $found = get_terms( array(
     2266                        'taxonomy'   => 'wptests_tax',
     2267                        'hide_empty' => 0,
     2268                        'slug'       => array(
     2269                                '0',
     2270                                'test',
     2271                        ),
     2272                ) );
     2273
     2274                $this->assertEqualSets( array( $term_id1, $term_id2 ), wp_list_pluck( $found, 'term_id' ) );
     2275        }
     2276
    22262277        protected function create_hierarchical_terms_and_posts() {
    22272278                $terms = array();
    22282279