WordPress.org

Make WordPress Core

Ticket #47863: 47863.patch

File 47863.patch, 2.2 KB (added by mauteri, 10 months ago)

Patch for issue plus unit tests

  • src/wp-includes/shortcodes.php

     
    498498function shortcode_parse_atts( $text ) {
    499499        $atts    = array();
    500500        $pattern = get_shortcode_atts_regex();
    501         $text    = preg_replace( "/[\x{00a0}\x{200b}]+/u", ' ', $text );
     501        $text    = trim( preg_replace( "/[\x{00a0}\x{200b}]+/u", ' ', $text ) );
     502
     503        // Remove everything but attributes from shortcode
     504        if ( preg_match( '/^\[\w+([^\]]*)\]/', $text, $matches ) ) {
     505                if ( count( $matches ) === 2 ) {
     506                        $text = trim( $matches[1], ' \/' );
     507                }
     508        }
     509
    502510        if ( preg_match_all( $pattern, $text, $match, PREG_SET_ORDER ) ) {
    503511                foreach ( $match as $m ) {
    504512                        if ( ! empty( $m[1] ) ) {
  • tests/phpunit/tests/shortcode.php

     
    972972                );
    973973                $this->assertEquals( 'test-shortcode-tag', $this->tagname );
    974974        }
     975
     976        public function data_shortcode_parse_atts() {
     977
     978                return [
     979                        [
     980                                '[unittest]',
     981                                '',
     982                        ],
     983                        [
     984                                '[unitest]Unit Test[/unittest]',
     985                                '',
     986                        ],
     987                        [
     988                                '[unittest title="unittest" link="https://unit.test/"]',
     989                                [
     990                                        'title' => 'unittest',
     991                                        'link'  => 'https://unit.test/',
     992                                ],
     993                        ],
     994                        [
     995                                '[unittest title="unittest" link="https://unit.test/"/]',
     996                                [
     997                                        'title' => 'unittest',
     998                                        'link'  => 'https://unit.test/',
     999                                ],
     1000                        ],
     1001                        [
     1002                        '[unittest title="unittest" link="https://unit.test/"]Unit Test[/unittest]',
     1003                                [
     1004                                        'title' => 'unittest',
     1005                                        'link'  => 'https://unit.test/',
     1006                                ],
     1007                        ],
     1008                        [
     1009                                'title="unittest" link="https://unit.test/"',
     1010                                [
     1011                                        'title' => 'unittest',
     1012                                        'link'  => 'https://unit.test/',
     1013                                ],
     1014                        ],
     1015                ];
     1016
     1017        }
     1018
     1019        /**
     1020         * @covers ::shortcode_parse_atts
     1021         * @dataProvider data_shortcode_parse_atts
     1022         *
     1023         * @param $shortcode
     1024         * @param $expects
     1025         */
     1026        public function test_shortcode_parse_atts( $shortcode, $expects ) {
     1027
     1028                $atts = shortcode_parse_atts( $shortcode );
     1029
     1030                $this->assertSame( $expects, $atts );
     1031
     1032        }
    9751033}