diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index 34d179ceff..d8b74561bb 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -2575,11 +2575,8 @@ function wp_ajax_send_attachment_to_editor() { } } - $rel = ''; $url = empty( $attachment['url'] ) ? '' : $attachment['url']; - if ( strpos( $url, 'attachment_id') || get_attachment_link( $id ) == $url ) { - $rel = 'attachment wp-att-' . $id; - } + $rel = ( strpos( $url, 'attachment_id') || get_attachment_link( $id ) == $url ); remove_filter( 'media_send_to_editor', 'image_media_send_to_editor' ); @@ -2600,8 +2597,10 @@ function wp_ajax_send_attachment_to_editor() { $html = stripslashes_deep( $_POST['html'] ); } else { $html = isset( $attachment['post_title'] ) ? $attachment['post_title'] : ''; + $rel = $rel ? ' rel="attachment wp-att-' . $id . '"' : ''; // Hard-coded string, $id is already sanitized + if ( ! empty( $url ) ) { - $html = '' . $html . ''; + $html = '' . $html . ''; } } diff --git a/src/wp-admin/includes/media.php b/src/wp-admin/includes/media.php index 2f7e585731..194e8273a1 100644 --- a/src/wp-admin/includes/media.php +++ b/src/wp-admin/includes/media.php @@ -111,24 +111,28 @@ function the_media_upload_tabs() { * @param string $title Image title attribute. * @param string $align Image CSS alignment property. * @param string $url Optional. Image src URL. Default empty. - * @param string $rel Optional. Image rel attribute. Default empty. + * @param bool|string $rel Optional. Value for rel attribute or whether to add a dafault value. Default false. * @param string|array $size Optional. Image size. Accepts any valid image size, or an array of width * and height values in pixels (in that order). Default 'medium'. * @param string $alt Optional. Image alt attribute. Default empty. * @return string The HTML output to insert into the editor. */ -function get_image_send_to_editor( $id, $caption, $title, $align, $url = '', $rel = '', $size = 'medium', $alt = '' ) { +function get_image_send_to_editor( $id, $caption, $title, $align, $url = '', $rel = false, $size = 'medium', $alt = '' ) { - $html = get_image_tag($id, $alt, '', $align, $size); + $html = get_image_tag( $id, $alt, '', $align, $size ); - if ( ! $rel ) { - $rel = ' rel="attachment wp-att-' . esc_attr( $id ) . '"'; + if ( $rel ) { + if ( is_string( $rel ) ) { + $rel = ' rel="' . esc_attr( $rel ) . '"'; + } else { + $rel = ' rel="attachment wp-att-' . intval( $id ) . '"'; + } } else { - $rel = ' rel="' . esc_attr( $rel ) . '"'; + $rel = ''; } if ( $url ) - $html = '$html"; + $html = '' . $html . ''; /** * Filter the image HTML markup to send to the editor. @@ -1166,7 +1170,7 @@ function image_media_send_to_editor($html, $attachment_id, $attachment) { $align = !empty($attachment['align']) ? $attachment['align'] : 'none'; $size = !empty($attachment['image-size']) ? $attachment['image-size'] : 'medium'; $alt = !empty($attachment['image_alt']) ? $attachment['image_alt'] : ''; - $rel = ( $url == get_attachment_link($attachment_id) ); + $rel = ( strpos( $url, 'attachment_id') || $url === get_attachment_link( $attachment_id ) ); return get_image_send_to_editor($attachment_id, $attachment['post_excerpt'], $attachment['post_title'], $align, $url, $rel, $size, $alt); } diff --git a/tests/phpunit/tests/media.php b/tests/phpunit/tests/media.php index 6db3482f26..d58b3e0dc4 100644 --- a/tests/phpunit/tests/media.php +++ b/tests/phpunit/tests/media.php @@ -1539,4 +1539,71 @@ EOF; $this->assertSame( $expected, $actual ); } + + /** + * @ticket 36084 + */ + function test_get_image_send_to_editor_defaults() { + $id = self::$large_id; + $caption = ''; + $title = 'A test title value.'; + $align = 'left'; + + // Calculate attachment data (default is medium). + $attachment = wp_get_attachment_image_src( $id, 'medium' ); + + $html = ''; + $expected = sprintf( $html, $attachment[0], $attachment[1], $attachment[2], $align, $id ); + + $this->assertSame( $expected, get_image_send_to_editor( $id, $caption, $title, $align ) ); + + $this->assertSame( $expected, get_image_send_to_editor( $id, $caption, $title, $align ) ); + } + + /** + * @ticket 36084 + */ + function test_get_image_send_to_editor_defaults_with_optional_params() { + $id = self::$large_id; + $caption = 'A test caption.'; + $title = 'A test title value.'; + $align = 'left'; + $url = get_permalink( $id ); + $rel = true; + $size = 'thumbnail'; + $alt = 'An example alt value.'; + + // Calculate attachment data. + $attachment = wp_get_attachment_image_src( $id, $size ); + + $html = '%4$s'; + $html = '[caption id="attachment_%9$d" align="align%7$s" width="%5$d"]' . $html . ' %10$s[/caption]'; + + $expected = sprintf( $html, $url, 'attachment wp-att-' . $id, $attachment[0], $alt, $attachment[1], $attachment[2], $align, $size, $id, $caption ); + + $this->assertSame( $expected, get_image_send_to_editor( $id, $caption, $title, $align, $url, $rel, $size, $alt ) ); + } + + /** + * @ticket 36084 + */ + function test_get_image_send_to_editor_defaults_no_caption_no_rel() { + $id = self::$large_id; + $caption = ''; + $title = 'A test title value.'; + $align = 'left'; + $url = get_permalink( $id ); + $rel = ''; + $size = 'thumbnail'; + $alt = 'An example alt value.'; + + // Calculate attachment data. + $attachment = wp_get_attachment_image_src( $id, $size ); + + $html = '%3$s'; + + $expected = sprintf( $html, $url, $attachment[0], $alt, $attachment[1], $attachment[2], $align, $size, $id ); + + $this->assertSame( $expected, get_image_send_to_editor( $id, $caption, $title, $align, $url, $rel, $size, $alt ) ); + } }