diff --git a/src/wp-includes/class.wp-dependencies.php b/src/wp-includes/class.wp-dependencies.php index c051770b12..a0d68c97a3 100644 --- a/src/wp-includes/class.wp-dependencies.php +++ b/src/wp-includes/class.wp-dependencies.php @@ -98,21 +98,6 @@ class WP_Dependencies { foreach ( $this->to_do as $key => $handle ) { if ( !in_array($handle, $this->done, true) && isset($this->registered[$handle]) ) { - - /* - * A single item may alias a set of items, by having dependencies, - * but no source. Queuing the item queues the dependencies. - * - * Example: The extending class WP_Scripts is used to register 'scriptaculous' as a set of registered handles: - * add( 'scriptaculous', false, array( 'scriptaculous-dragdrop', 'scriptaculous-slider', 'scriptaculous-controls' ) ); - * - * The src property is false. - */ - if ( ! $this->registered[$handle]->src ) { - $this->done[] = $handle; - continue; - } - /* * Attempt to process the item. If successful, * add the handle to the done array. diff --git a/src/wp-includes/class.wp-scripts.php b/src/wp-includes/class.wp-scripts.php index 298eda7b5b..5d8fb17ae3 100644 --- a/src/wp-includes/class.wp-scripts.php +++ b/src/wp-includes/class.wp-scripts.php @@ -177,6 +177,11 @@ class WP_Scripts extends WP_Dependencies { echo $cond_after; } + // A single item may alias a set of items, by having dependencies, but no source. + if ( ! $obj->src ) { + return true; + } + if ( ! preg_match( '|^(https?:)?//|', $src ) && ! ( $this->content_url && 0 === strpos( $src, $this->content_url ) ) ) { $src = $this->base_url . $src; } diff --git a/src/wp-includes/class.wp-styles.php b/src/wp-includes/class.wp-styles.php index e462f8c111..463b9a3645 100644 --- a/src/wp-includes/class.wp-styles.php +++ b/src/wp-includes/class.wp-styles.php @@ -72,11 +72,20 @@ class WP_Styles extends WP_Dependencies { else $media = 'all'; - $href = $this->_css_href( $obj->src, $ver, $handle ); - if ( empty( $href ) ) { - // Turns out there is nothing to print. + // A single item may alias a set of items, by having dependencies, but no source. + if ( ! $obj->src ) { + if ( $inline_style = $this->print_inline_style( $handle, false ) ) { + $inline_style = sprintf( "\n", esc_attr( $handle ), $inline_style ); + if ( $this->do_concat ) { + $this->print_html .= $inline_style; + } else { + echo $inline_style; + } + } return true; } + + $href = $this->_css_href( $obj->src, $ver, $handle ); $rel = isset($obj->extra['alt']) && $obj->extra['alt'] ? 'alternate stylesheet' : 'stylesheet'; $title = isset($obj->extra['title']) ? "title='" . esc_attr( $obj->extra['title'] ) . "'" : ''; diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php index 950e53e2fd..0624b594b2 100644 --- a/tests/phpunit/tests/dependencies/scripts.php +++ b/tests/phpunit/tests/dependencies/scripts.php @@ -166,4 +166,20 @@ class Tests_Dependencies_Scripts extends WP_UnitTestCase { $this->assertFalse( wp_register_script( 'duplicate-handler', 'http://example.com' ) ); } + /** + * @ticket 35229 + */ + function test_wp_register_script_with_handle_without_source() { + $expected = "\n"; + $expected .= "\n"; + + wp_register_script( 'handle-one', 'http://example.com', array(), 1 ); + wp_register_script( 'handle-two', 'http://example.com', array(), 2 ); + wp_register_script( 'handle-three', false, array( 'handle-one', 'handle-two' ) ); + + wp_enqueue_script( 'handle-three' ); + + $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) ); + } + } diff --git a/tests/phpunit/tests/dependencies/styles.php b/tests/phpunit/tests/dependencies/styles.php index 2b5af5bb9f..a2d74f5eec 100644 --- a/tests/phpunit/tests/dependencies/styles.php +++ b/tests/phpunit/tests/dependencies/styles.php @@ -234,9 +234,31 @@ CSS; * * @ticket 31126 */ - function test_wp_register_style(){ + function test_wp_register_style() { $this->assertTrue( wp_register_style( 'duplicate-handler', 'http://example.com' ) ); $this->assertFalse( wp_register_style( 'duplicate-handler', 'http://example.com' ) ); } + /** + * @ticket 35229 + */ + function test_wp_add_inline_style_for_handle_without_source() { + $style = "a { color: blue; }"; + + $expected = "\n"; + $expected .= "\n"; + $expected .= "\n"; + + wp_register_style( 'handle-one', 'http://example.com', array(), 1 ); + wp_register_style( 'handle-two', 'http://example.com', array(), 1 ); + wp_register_style( 'handle-three', false, array( 'handle-one', 'handle-two' ) ); + + wp_enqueue_style( 'handle-three' ); + wp_add_inline_style( 'handle-three', $style ); + + $this->assertEquals( $expected, get_echo( 'wp_print_styles' ) ); + } + }