WordPress.org

Make WordPress Core

Changeset 42250


Ignore:
Timestamp:
11/28/2017 07:09:43 AM (4 years ago)
Author:
rmccue
Message:

REST API: Ensure rest_url() consistently has leading slash.

rest_url() inconsistent addes slashes to the passed path depending on whether the site has pretty permalinks enabled. Apart from being inconsistent, this also caused the unit tests to fail when pretty permalinks are enabled.

Props frank-klein.
Fixes #42452. See #41451.

Location:
trunk
Files:
2 edited

Legend:

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

    r42000 r42250  
    308308    }
    309309
     310    $path = '/' . ltrim( $path, '/' );
     311
    310312    if ( is_multisite() && get_blog_option( $blog_id, 'permalink_structure' ) || get_option( 'permalink_structure' ) ) {
    311313        global $wp_rewrite;
     
    317319        }
    318320
    319         $url .= '/' . ltrim( $path, '/' );
     321        $url .= $path;
    320322    } else {
    321323        $url = trailingslashit( get_home_url( $blog_id, '', $scheme ) );
     
    325327            $url .= 'index.php';
    326328        }
    327 
    328         $path = '/' . ltrim( $path, '/' );
    329329
    330330        $url = add_query_arg( 'rest_route', $path, $url );
  • trunk/tests/phpunit/tests/rest-api.php

    r41744 r42250  
    487487        set_current_screen( 'front' );
    488488
     489    }
     490
     491    /**
     492     * @ticket 42452
     493     */
     494    public function test_always_prepend_path_with_slash_in_rest_url_filter() {
     495        $filter = new MockAction();
     496        add_filter( 'rest_url', array( $filter, 'filter' ), 10, 2 );
     497
     498        // Passing no path should return a slash.
     499        get_rest_url();
     500        $args = $filter->get_args();
     501        $this->assertEquals( '/', $args[0][1] );
     502        $filter->reset();
     503
     504        // Paths without a prepended slash should have one added.
     505        get_rest_url( null, 'wp/media/' );
     506        $args = $filter->get_args();
     507        $this->assertEquals( '/wp/media/', $args[0][1] );
     508        $filter->reset();
     509
     510        // Do not modify paths with a prepended slash.
     511        get_rest_url( null, '/wp/media/' );
     512        $args = $filter->get_args();
     513        $this->assertEquals( '/wp/media/', $args[0][1] );
     514
     515        unset( $filter );
    489516    }
    490517
Note: See TracChangeset for help on using the changeset viewer.