]+)>[\s\S]+?<\/a>/', $content, $link_matches ) )
return;
- $i = 0;
- $search = "#[\s]+rel=(\"|')(.*?)wp-att-(\d+)\\1#i";
- foreach ( $anchor_matches[0] as $anchor ) {
- if ( 0 == preg_match( $search, $anchor, $id_matches ) )
- continue;
+ $site_url = get_bloginfo('url');
+ $site_url = substr( $site_url, (int) strpos($site_url, '://') ); // remove the http(s)
+ $replace = '';
- $id = (int) $id_matches[3];
+ foreach ( $link_matches[1] as $key => $value ) {
+ if ( !strpos($value, '?attachment_id=') || !strpos($value, 'wp-att-')
+ || !preg_match( '/href=(["\'])[^"\']*\?attachment_id=(\d+)[^"\']*\\1/', $value, $url_match )
+ || !preg_match( '/rel=["\'][^"\']*wp-att-(\d+)/', $value, $rel_match ) )
+ continue;
- // While we have the attachment ID, let's adopt any orphans.
- $attachment = & get_post( $id, ARRAY_A );
- if ( ! empty( $attachment) && ! is_object( get_post( $attachment['post_parent'] ) ) ) {
- $attachment['post_parent'] = $post_ID;
- // Escape data pulled from DB.
- $attachment = add_magic_quotes( $attachment );
- wp_update_post( $attachment );
- }
+ $quote = $url_match[1]; // the quote (single or double)
+ $url_id = (int) $url_match[2];
+ $rel_id = (int) $rel_match[1];
- $post_search[$i] = $anchor;
- $_fix_attachment_link_id = $id;
- $post_replace[$i] = preg_replace_callback( "#href=(\"|')[^'\"]*\\1#", '_fix_attachment_links_replace_cb', $anchor );
- ++$i;
- }
+ if ( !$url_id || !$rel_id || $url_id != $rel_id || strpos($url_match[0], $site_url) === false )
+ continue;
- $post['post_content'] = str_replace( $post_search, $post_replace, $post['post_content'] );
+ $link = $link_matches[0][$key];
+ $replace = str_replace( $url_match[0], 'href=' . $quote . get_attachment_link( $url_id ) . $quote, $link );
- // Escape data pulled from DB.
- $post = add_magic_quotes( $post);
+ $content = str_replace( $link, $replace, $content );
+ }
- return wp_update_post( $post);
-}
+ if ( $replace ) {
+ $post['post_content'] = $content;
+ // Escape data pulled from DB.
+ $post = add_magic_quotes($post);
-function _fix_attachment_links_replace_cb($match) {
- global $_fix_attachment_link_id;
- return stripslashes( 'href='.$match[1] ).get_attachment_link( $_fix_attachment_link_id ).stripslashes( $match[1] );
+ return wp_update_post($post);
+ }
}
/**
@@ -973,7 +968,8 @@ function wp_edit_attachments_query( $q = false ) {
}
function _edit_attachments_query_helper($where) {
- return $where .= ' AND post_parent < 1';
+ global $wpdb;
+ return $where .= " AND {$wpdb->posts}.post_parent < 1";
}
/**
@@ -1140,12 +1136,18 @@ function get_sample_permalink_html( $id, $new_title = null, $new_slug = null ) {
* @since 2.9.0
*
* @param int $thumbnail_id ID of the attachment used for thumbnail
+ * @param int $post_id ID of the post associated with the thumbnail, defaults to global $post_ID
* @return string html
*/
-function _wp_post_thumbnail_html( $thumbnail_id = NULL ) {
+function _wp_post_thumbnail_html( $thumbnail_id = null, $post_id = null ) {
global $content_width, $_wp_additional_image_sizes, $post_ID;
- $set_thumbnail_link = '%s
';
- $content = sprintf($set_thumbnail_link, esc_html__( 'Set featured image' ));
+
+ if ( empty( $post_id ) )
+ $post_id = $post_ID;
+
+ $upload_iframe_src = esc_url( get_upload_iframe_src('image', $post_id) );
+ $set_thumbnail_link = '%s
';
+ $content = sprintf( $set_thumbnail_link, $upload_iframe_src, esc_html__( 'Set featured image' ) );
if ( $thumbnail_id && get_post( $thumbnail_id ) ) {
$old_content_width = $content_width;
@@ -1155,8 +1157,8 @@ function _wp_post_thumbnail_html( $thumbnail_id = NULL ) {
else
$thumbnail_html = wp_get_attachment_image( $thumbnail_id, 'post-thumbnail' );
if ( !empty( $thumbnail_html ) ) {
- $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$post_ID" );
- $content = sprintf($set_thumbnail_link, $thumbnail_html);
+ $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$post_id" );
+ $content = sprintf( $set_thumbnail_link, $upload_iframe_src, $thumbnail_html );
$content .= '' . esc_html__( 'Remove featured image' ) . '
';
}
$content_width = $old_content_width;
@@ -1259,7 +1261,7 @@ function wp_create_post_autosave( $post_id ) {
if ( is_wp_error( $translated ) )
return $translated;
- // Only store one autosave. If there is already an autosave, overwrite it.
+ // Only store one autosave. If there is already an autosave, overwrite it.
if ( $old_autosave = wp_get_post_autosave( $post_id ) ) {
$new_autosave = _wp_post_revision_fields( $_POST, true );
$new_autosave['ID'] = $old_autosave->ID;
@@ -1320,7 +1322,7 @@ function post_preview() {
if ( 'draft' == $post->post_status ) {
$id = edit_post();
- } else { // Non drafts are not overwritten. The autosave is stored in a special post revision.
+ } else { // Non drafts are not overwritten. The autosave is stored in a special post revision.
$id = wp_create_post_autosave( $post->ID );
if ( ! is_wp_error($id) )
$id = $post->ID;