_fix_attachment_links

函数
_fix_attachment_links ( $post )
Access
Private
参数
  • (int|object) $post Post ID or post object.
    Required:
返回值
  • (void|int|WP_Error) Void if nothing fixed. 0 or WP_Error on update failure. The post ID on update success.
定义位置
相关方法
the_attachment_linksget_attachment_linkthe_attachment_linkwp_get_attachment_linkget_the_attachment_link
引入
2.3.0
弃用
-

fix_attachment_links: 当附件被嵌入到内容中时,这个函数用来修复附件的链接。它用于确保附件的链接在内容显示时能正常工作。

用最新的permalinks替换附件锚的hrefs。

function _fix_attachment_links( $post ) {
	$post    = get_post( $post, ARRAY_A );
	$content = $post['post_content'];

	// Don't run if no pretty permalinks or post is not published, scheduled, or privately published.
	if ( ! get_option( 'permalink_structure' ) || ! in_array( $post['post_status'], array( 'publish', 'future', 'private' ), true ) ) {
		return;
	}

	// Short if there aren't any links or no '?attachment_id=' strings (strpos cannot be zero).
	if ( ! strpos( $content, '?attachment_id=' ) || ! preg_match_all( '/<a ([^>]+)>[sS]+?</a>/', $content, $link_matches ) ) {
		return;
	}

	$site_url = get_bloginfo( 'url' );
	$site_url = substr( $site_url, (int) strpos( $site_url, '://' ) ); // Remove the http(s).
	$replace  = '';

	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;
		}

		$quote  = $url_match[1]; // The quote (single or double).
		$url_id = (int) $url_match[2];
		$rel_id = (int) $rel_match[1];

		if ( ! $url_id || ! $rel_id || $url_id != $rel_id || strpos( $url_match[0], $site_url ) === false ) {
			continue;
		}

		$link    = $link_matches[0][ $key ];
		$replace = str_replace( $url_match[0], 'href=' . $quote . get_attachment_link( $url_id ) . $quote, $link );

		$content = str_replace( $link, $replace, $content );
	}

	if ( $replace ) {
		$post['post_content'] = $content;
		// Escape data pulled from DB.
		$post = add_magic_quotes( $post );

		return wp_update_post( $post );
	}
}

常见问题

FAQs
查看更多 >