WordPress.org

Make WordPress Core

Ticket #47863: 47863.1.patch

File 47863.1.patch, 3.1 KB (added by mauteri, 8 months ago)

Updates to patch per first round of reviews

  • src/wp-includes/shortcodes.php

     
    489489 *
    490490 * @since 2.5.0
    491491 *
    492  * @param string $text
     492 * @param string $text  Any single shortcode of any format or key/value pair string
    493493 * @return array|string List of attribute values.
    494494 *                      Returns empty array if trim( $text ) == '""'.
    495495 *                      Returns empty string if trim( $text ) == ''.
     
    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] ) ) {
     
    527535        } else {
    528536                $atts = ltrim( $text );
    529537        }
     538
    530539        return $atts;
    531540}
    532541
  • 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 array(
     979                        array(
     980                                '[unittest]',
     981                                '',
     982                        ),
     983                        array(
     984                                '[unitest]Unit Test[/unittest]',
     985                                '',
     986                        ),
     987                        array(
     988                                '[unittest title="unittest" link="https://unit.test/"]',
     989                                array(
     990                                        'title' => 'unittest',
     991                                        'link'  => 'https://unit.test/',
     992                                ),
     993                        ),
     994                        array(
     995                                '[unittest title="unittest" link="https://unit.test/"/]',
     996                                array(
     997                                        'title' => 'unittest',
     998                                        'link'  => 'https://unit.test/',
     999                                ),
     1000                        ),
     1001                        array(
     1002                                '[unit_test title="unittest" link="https://unit.test/"/]',
     1003                                array(
     1004                                        'title' => 'unittest',
     1005                                        'link'  => 'https://unit.test/',
     1006                                ),
     1007                        ),
     1008                        array(
     1009                                '[unit-test title="unittest" link="https://unit.test/"/]',
     1010                                array(
     1011                                        'title' => 'unittest',
     1012                                        'link'  => 'https://unit.test/',
     1013                                ),
     1014                        ),
     1015                        array(
     1016                        '[unittest title="unittest" link="https://unit.test/"]Unit Test[/unittest]',
     1017                                array(
     1018                                        'title' => 'unittest',
     1019                                        'link'  => 'https://unit.test/',
     1020                                ),
     1021                        ),
     1022                        array(
     1023                                'title="unittest" link="https://unit.test/"',
     1024                                array(
     1025                                        'title' => 'unittest',
     1026                                        'link'  => 'https://unit.test/',
     1027                                ),
     1028                        ),
     1029                        array(
     1030                                '\'\'',
     1031                                array(),
     1032                        ),
     1033                        array(
     1034                                '""',
     1035                                array(),
     1036                        ),
     1037                );
     1038
     1039        }
     1040
     1041        /**
     1042         * @covers ::shortcode_parse_atts
     1043         * @dataProvider data_shortcode_parse_atts
     1044         *
     1045         * @ticket 47863
     1046         *
     1047         * @param $shortcode
     1048         * @param $expects
     1049         */
     1050        public function test_shortcode_parse_atts( $shortcode, $expects ) {
     1051
     1052                $atts = shortcode_parse_atts( $shortcode );
     1053
     1054                $this->assertSame( $expects, $atts );
     1055
     1056        }
    9751057}