返回介绍

pingback()

发布于 2017-09-11 09:54:24 字数 5302 浏览 1079 评论 0 收藏 0

pingback( string $content,  int|WP_Post $post_id )

Pings back the links found in a post.


description


参数

$content

(string) (Required) Post content to check for links. If empty will retrieve from post.

$post_id

(int|WP_Post) (Required) Post Object or ID.


源代码

File: wp-includes/comment.php

function pingback( $content, $post_id ) {
	include_once( ABSPATH . WPINC . '/class-IXR.php' );
	include_once( ABSPATH . WPINC . '/class-wp-http-ixr-client.php' );

	// original code by Mort (http://mort.mine.nu:8080)
	$post_links = array();

	$post = get_post( $post_id );
	if ( ! $post ) {
		return;
	}

	$pung = get_pung( $post );

	if ( empty( $content ) ) {
		$content = $post->post_content;
	}

	// Step 1
	// Parsing the post, external links (if any) are stored in the $post_links array
	$post_links_temp = wp_extract_urls( $content );

	// Step 2.
	// Walking thru the links array
	// first we get rid of links pointing to sites, not to specific files
	// Example:
	// http://dummy-weblog.org
	// http://dummy-weblog.org/
	// http://dummy-weblog.org/post.php
	// We don't wanna ping first and second types, even if they have a valid <link/>

	foreach ( (array) $post_links_temp as $link_test ) :
		if ( ! in_array( $link_test, $pung ) && ( url_to_postid( $link_test ) != $post->ID ) // If we haven't pung it already and it isn't a link to itself
				&& !is_local_attachment($link_test) ) : // Also, let's never ping local attachments.
			if ( $test = @parse_url($link_test) ) {
				if ( isset($test['query']) )
					$post_links[] = $link_test;
				elseif ( isset( $test['path'] ) && ( $test['path'] != '/' ) && ( $test['path'] != '' ) )
					$post_links[] = $link_test;
			}
		endif;
	endforeach;

	$post_links = array_unique( $post_links );
	/**
	 * Fires just before pinging back links found in a post.
	 *
	 * @since 2.0.0
	 *
	 * @param array &$post_links An array of post links to be checked, passed by reference.
	 * @param array &$pung       Whether a link has already been pinged, passed by reference.
	 * @param int   $post_ID     The post ID.
	 */
	do_action_ref_array( 'pre_ping', array( &$post_links, &$pung, $post->ID ) );

	foreach ( (array) $post_links as $pagelinkedto ) {
		$pingback_server_url = discover_pingback_server_uri( $pagelinkedto );

		if ( $pingback_server_url ) {
			@ set_time_limit( 60 );
			// Now, the RPC call
			$pagelinkedfrom = get_permalink( $post );

			// using a timeout of 3 seconds should be enough to cover slow servers
			$client = new WP_HTTP_IXR_Client($pingback_server_url);
			$client->timeout = 3;
			/**
			 * Filters the user agent sent when pinging-back a URL.
			 *
			 * @since 2.9.0
			 *
			 * @param string $concat_useragent    The user agent concatenated with ' -- WordPress/'
			 *                                    and the WordPress version.
			 * @param string $useragent           The useragent.
			 * @param string $pingback_server_url The server URL being linked to.
			 * @param string $pagelinkedto        URL of page linked to.
			 * @param string $pagelinkedfrom      URL of page linked from.
			 */
			$client->useragent = apply_filters( 'pingback_useragent', $client->useragent . ' -- WordPress/' . get_bloginfo( 'version' ), $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom );
			// when set to true, this outputs debug messages by itself
			$client->debug = false;

			if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto) || ( isset($client->error->code) && 48 == $client->error->code ) ) // Already registered
				add_ping( $post, $pagelinkedto );
		}
	}
}

更新日志

Versiondescription
4.7.0$post_id can be a WP_Post object.
0.71Introduced.

相关函数

Uses

  • wp-includes/general-template.php: get_bloginfo()
  • wp-includes/functions.php: wp_extract_urls()
  • wp-includes/link-template.php: get_permalink()
  • wp-includes/plugin.php: do_action_ref_array()
  • wp-includes/plugin.php: apply_filters()
  • wp-includes/post.php: get_pung()
  • wp-includes/post.php: is_local_attachment()
  • wp-includes/post.php: add_ping()
  • wp-includes/post.php: get_post()
  • wp-includes/rewrite.php: url_to_postid()
  • wp-includes/class-wp-http-ixr-client.php: WP_HTTP_IXR_Client::__construct()
  • wp-includes/comment.php: pingback_useragent
  • wp-includes/comment.php: discover_pingback_server_uri()
  • wp-includes/comment.php: pre_ping
  • Show 9 more uses Hide more uses

Used By

  • wp-includes/comment.php: do_all_pings()

User Contributed Notes

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文