_fix_attachment_links() - WordPress 函数参考中文文档

返回介绍

_fix_attachment_links()

发布于 2017-09-11 字数 3343 浏览 749 评论 0

Alert: This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

_fix_attachment_links( int|object $post )

Replace hrefs of attachment anchors with up-to-date permalinks.


描述


参数

$post

(int|object)
(Required)
Post ID or post object.


返回值

(void|int|WP_Error) Void if nothing fixed. 0 or WP_Error on update failure. The post ID on update success.


源代码

File: wp-admin/includes/post.php

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' ) ) )
		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 ([^>]+)>[\s\S]+?<\/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);
	}
}

更新日志

Version 描述
2.3.0 Introduced.

相关函数

Uses

  • wp-includes/general-template.php:
    get_bloginfo()
  • wp-includes/functions.php:
    add_magic_quotes()
  • wp-includes/link-template.php:
    get_attachment_link()
  • wp-includes/option.php:
    get_option()
  • wp-includes/post.php:
    wp_update_post()
  • wp-includes/post.php:
    get_post()
  • Show 1 more use
    Hide more uses


Used By

  • wp-admin/includes/post.php:
    wp_write_post()
  • wp-admin/includes/post.php:
    edit_post()

User Contributed Notes

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!