Make WordPress Core

Changeset 32553


Ignore:
Timestamp:
05/23/2015 06:28:22 PM (10 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.