Make WordPress Core

Changeset 32553


Ignore:
Timestamp:
05/23/2015 06:28:22 PM (11 years ago)
Author:
boonebgorges
Message:

Introduced $field argument to get_term_link().

This new argument allows developers to specify which term field should be
matched by the value of the $term parameter (in particular, 'name' and
'term_taxonomy_id' are now supported).

Props sudar, mordauk.
Fixes #14156.

Location:
trunk
Files:
2 edited

Legend:

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

    r32498 r32553  
    43824382 *
    43834383 * @since 2.5.0
     4384 * @since 4.3.0 Introduced `$field` argument.
    43844385 *
    43854386 * @param object|int|string $term     The term object, ID, or slug whose link will be retrieved.
    43864387 * @param string            $taxonomy Optional. Taxonomy. Default empty.
     4388 * @param string            $field    Optional. The term field that should be matched by the `$term` argument. Accepts
     4389 *                                    any `$field` values accepted by `get_term_by()`: 'slug', 'name',
     4390 *                                    'term_taxonomy_id', or 'id'. Default is 'slug', unless `$term` is an integer, in
     4391 *                                    which case it's asssumed to be an ID.
    43874392 * @return string|WP_Error HTML link to taxonomy term archive on success, WP_Error if term does not exist.
    43884393 */
    4389 function get_term_link( $term, $taxonomy = '' ) {
     4394function get_term_link( $term, $taxonomy = '', $field = null ) {
    43904395        global $wp_rewrite;
    43914396
    43924397        if ( !is_object($term) ) {
    4393                 if ( is_int($term) ) {
    4394                         $term = get_term($term, $taxonomy);
    4395                 } else {
    4396                         $term = get_term_by('slug', $term, $taxonomy);
    4397                 }
     4398                if ( is_null( $field ) ) {
     4399                        $field = is_int( $term ) ? 'id' : 'slug';
     4400                }
     4401
     4402                $term = get_term_by( $field, $term, $taxonomy );
    43984403        }
    43994404
  • trunk/tests/phpunit/tests/term/getTermLink.php

    r32552 r32553  
    5555                $term = (string) $t1;
    5656
     57                $actual = get_term_link( $term, 'wptests_tax', 'id' );
     58                $this->assertContains( 'wptests_tax=foo', $actual );
     59        }
     60
     61        /**
     62         * @ticket 14156
     63         */
     64        public function test_should_match_field_by_name() {
     65                $t = $this->factory->term->create( array(
     66                        'taxonomy' => 'wptests_tax',
     67                        'slug' => 'foo',
     68                        'name' => 'Bar Term',
     69                ) );
     70
     71                $actual = get_term_link( 'Bar Term', 'wptests_tax', 'name' );
     72                $this->assertContains( 'wptests_tax=foo', $actual );
     73        }
     74
     75        /**
     76         * @ticket 14156
     77         */
     78        public function test_should_match_field_by_tt_id() {
     79                $t = $this->factory->term->create( array(
     80                        'taxonomy' => 'wptests_tax',
     81                        'slug' => 'foo',
     82                        'name' => 'Bar Term',
     83                ) );
     84
     85                $actual = get_term_link( 'Bar Term', 'wptests_tax', 'name' );
     86                $this->assertContains( 'wptests_tax=foo', $actual );
     87        }
     88
     89        /**
     90         * @ticket 14156
     91         */
     92        public function test_numeric_string_should_be_interpreted_as_term_id_if_id_field_is_specified() {
     93                $t1 = $this->factory->term->create( array(
     94                        'taxonomy' => 'wptests_tax',
     95                        'name' => 'foo',
     96                ) );
     97                $t2 = $this->factory->term->create( array(
     98                        'taxonomy' => 'wptests_tax',
     99                        'slug' => $t1,
     100                ) );
     101
     102                $term = (string) $t1;
     103
    57104                $actual = get_term_link( $term, 'wptests_tax' );
    58105                $this->assertContains( 'wptests_tax=' . $term, $actual );
Note: See TracChangeset for help on using the changeset viewer.