WordPress.org

Make WordPress Core

Ticket #14853: 14853.3.diff

File 14853.3.diff, 3.8 KB (added by atimmer, 5 years ago)
  • src/wp-includes/class.wp-scripts.php

     
    5858                return $this->print_extra_script( $handle, $echo );
    5959        }
    6060
    61         function print_extra_script( $handle, $echo = true ) {
    62                 if ( !$output = $this->get_data( $handle, 'data' ) )
     61        function print_extra_script( $handle, $echo = true, $data = 'data' ) {
     62                if ( ! $output = $this->get_data( $handle, $data ) )
    6363                        return;
    6464
    65                 if ( !$echo )
     65                $output = implode( "\n", $output );
     66
     67                if ( ! $echo )
    6668                        return $output;
    6769
    6870                echo "<script type='text/javascript'>\n"; // CDATA and type='text/javascript' is not needed for HTML 5
     
    119121
    120122                $src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );
    121123
    122                 if ( $this->do_concat )
     124                if ( $this->do_concat ) {
    123125                        $this->print_html .= "<script type='text/javascript' src='$src'></script>\n";
    124                 else
     126                        $this->print_html .= $this->print_extra_script( $handle, false, 'after' );
     127                } else {
    125128                        echo "<script type='text/javascript' src='$src'></script>\n";
     129                        $this->print_extra_script( $handle, true, 'after' );
     130                }
    126131
    127132                return true;
    128133        }
    129134
     135        function add_inline_script( $handle, $code ) {
     136                if ( ! $code )
     137                        return false;
     138
     139                $after = $this->get_data( $handle, 'after' );
     140                if ( ! $after )
     141                        $after = array();
     142
     143                $after[] = $code;
     144
     145                return $this->add_data( $handle, 'after', $after );
     146        }
     147
    130148        /**
    131149         * Localizes a script
    132150         *
  • src/wp-includes/functions.wp-scripts.php

     
    3939}
    4040
     41/**
     42 * Adds extra javascript.
     43 *
     44 * Works only if the javascript has already been added.
     45 * Accepts a string $data containing the javascript. If two or more javascript code blocks are
     46 * added to the same stylesheet $handle, they will be printed in the order
     47 * they were added, i.e. the latter added styles can redeclare the previous.
     48 *
     49 * Uses $wp_scripts
     50 *
     51 * @since 3.7.0
     52 * @see WP_Scripts::add_inline_script()
     53 * @param $handle string Handle of the script to put this inline script after
     54 * @param $data string Script to put after the script of the $handle
     55 */
     56function wp_add_inline_script( $handle, $data ) {
     57        global $wp_scripts;
     58        if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
     59                if ( ! did_action( 'init' ) )
     60                        _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), '<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>login_enqueue_scripts</code>' ), '3.7' );
     61                $wp_scripts = new WP_Scripts();
     62        }
     63
     64        return $wp_scripts->add_inline_script( $handle, $data );
     65}
     66
    4167/**
    4268 * Register new Javascript file.
    4369 *
    4470 * @since r16
  • tests/tests/dependencies/scripts.php

     
    4242        }
    4343
     44        /**
     45         * Tests wp_add_inline_scripts
     46         * @ticket 14853
     47         */
     48        public function test_wp_add_inline_script() {
     49                $expected = '';
     50                $ver = get_bloginfo( 'version' );
     51
     52                wp_enqueue_script( 'handle', '//url' );
     53                wp_add_inline_script( 'handle', 'sometestdata' );
     54                $expected .= "<script type='text/javascript' src='//url?ver=$ver'></script>\n";
     55                $expected .= "<script type='text/javascript'>\n/* <![CDATA[ */\nsometestdata\n/* ]]> */\n</script>\n";
     56
     57                $returned = get_echo( 'wp_print_scripts' );
     58                $this->assertEquals( $expected, $returned );
     59        }
     60
    4461        /**
    4562         * Test the different protocol references in wp_enqueue_script
    4663         * @global WP_Scripts $wp_scripts
    4764         * @ticket 16560