# discover_pingback_server_uri()

URL: https://chugunov.pro/api-wordpress/functions/discover_pingback_server_uri/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 1.5.0.

## Сигнатура

```php
discover_pingback_server_uri( string $url, string $deprecated = '' ): string|false
```

## Описание

Проверяет HTML на наличие ссылки rel="pingback" и заголовков X-Pingback. Сначала выполняется проверка заголовков X-Pingback, и их значение возвращается, если оно доступно.
Проверка rel="pingback" требует больше ресурсов, чем проверка одного лишь заголовка.

## Параметры

- `$url` `string` — обязательный. URL для отправки пинга.
- `$deprecated` `string` — необязательный, по умолчанию `''`. Не используется.

## Возвращаемое значение

`string|false`

## Исходный код

Файл: `wp-includes/comment.php:2924`

```php
function discover_pingback_server_uri( $url, $deprecated = '' ) {
	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '2.7.0' );
	}

	$pingback_str_dquote = 'rel="pingback"';
	$pingback_str_squote = 'rel=\'pingback\'';

	/** @todo Should use Filter Extension or custom preg_match instead. */
	$parsed_url = parse_url( $url );

	if ( ! isset( $parsed_url['host'] ) ) { // Not a URL. This should never happen.
		return false;
	}

	// Do not search for a pingback server on our own uploads.
	$uploads_dir = wp_get_upload_dir();
	if ( str_starts_with( $url, $uploads_dir['baseurl'] ) ) {
		return false;
	}

	$response = wp_safe_remote_head(
		$url,
		array(
			'timeout'     => 2,
			'httpversion' => '1.0',
		)
	);

	if ( is_wp_error( $response ) ) {
		return false;
	}

	if ( wp_remote_retrieve_header( $response, 'X-Pingback' ) ) {
		return wp_remote_retrieve_header( $response, 'X-Pingback' );
	}

	// Not an (x)html, sgml, or xml page, no use going further.
	if ( preg_match( '#(image|audio|video|model)/#is', wp_remote_retrieve_header( $response, 'Content-Type' ) ) ) {
		return false;
	}

	// Now do a GET since we're going to look in the HTML headers (and we're sure it's not a binary file).
	$response = wp_safe_remote_get(
		$url,
		array(
			'timeout'     => 2,
			'httpversion' => '1.0',
		)
	);

	if ( is_wp_error( $response ) ) {
		return false;
	}

	$contents = wp_remote_retrieve_body( $response );

	$pingback_link_offset_dquote = strpos( $contents, $pingback_str_dquote );
	$pingback_link_offset_squote = strpos( $contents, $pingback_str_squote );

	if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) {
		$quote                   = ( $pingback_link_offset_dquote ) ? '"' : '\'';
		$pingback_link_offset    = ( '"' === $quote ) ? $pingback_link_offset_dquote : $pingback_link_offset_squote;
		$pingback_href_pos       = strpos( $contents, 'href=', $pingback_link_offset );
		$pingback_href_start     = $pingback_href_pos + 6;
		$pingback_href_end       = strpos( $contents, $quote, $pingback_href_start );
		$pingback_server_url_len = $pingback_href_end - $pingback_href_start;
		$pingback_server_url     = substr( $contents, $pingback_href_start, $pingback_server_url_len );

		// We may find rel="pingback" but an incomplete pingback URL.
		if ( $pingback_server_url_len > 0 ) { // We got it!
			return $pingback_server_url;
		}
	}

	return false;
}
```

## История изменений

- 1.5.0 — Introduced.

## Связанные

Использует: [`wp_get_upload_dir`](https://chugunov.pro/api-wordpress/functions/wp_get_upload_dir/), [`wp_safe_remote_head`](https://chugunov.pro/api-wordpress/functions/wp_safe_remote_head/), [`wp_remote_retrieve_header`](https://chugunov.pro/api-wordpress/functions/wp_remote_retrieve_header/), [`wp_safe_remote_get`](https://chugunov.pro/api-wordpress/functions/wp_safe_remote_get/), [`wp_remote_retrieve_body`](https://chugunov.pro/api-wordpress/functions/wp_remote_retrieve_body/), [`_deprecated_argument`](https://chugunov.pro/api-wordpress/functions/_deprecated_argument/), [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/).
Используется в: [`pingback`](https://chugunov.pro/api-wordpress/functions/pingback/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/discover_pingback_server_uri/
