is_local_attachment()WP 2.0.0

Является ли переданный URL страницей вложения текущего сайта.

Используется, чтобы отличать медиафайлы из вашей медиабиблиотеки от внешних ссылок перед обработкой: генерацией превью, подстановкой srcset, оборачиванием в разметку и т.п.

Заметки

  • Возвращает true только для URL текущего сайта; внешние домены всегда дают false (включая CDN с другим доменом).

  • Указанный УРЛ должен быть абсолютным с протоколом (http/https).

  • Если файл удалён физически, но запись-вложение есть в БД, результат все равно будет true.

  • В мультисайтах проверка относится к текущему блогу: URL из другого блога считается внешним - вернет false.

Используйте attachment_url_to_postid(), чтобы получить ID вложения.

Работает на основе: url_to_postid()
1 раз — 0.001947 сек (очень медленно) | 50000 раз — 80.64 сек (очень медленно) | PHP 7.0.5, WP 4.4.2

Хуков нет.

Возвращает

true|false.

Использование

if( is_local_attachment( $url ) ){
	// это файл из медиатеки WordPress
}
$url(строка) (обязательный)
URL, который нужно проверить.

Примеры

0

#1 Проверим URL - вложение ли это

Допустим, у нас есть ссылка на файл который находится в медиатеке wordpress: http://example.com/wp-content/uploads/2016/03/import.png и у этого файл также есть своя страница во фронте: http://example.com/attachment/import:

is_local_attachment('http://example.com/wp-content/uploads/2016/03/import.png'); //> false

is_local_attachment('http://example.com/attachment/import'); //> true

// несуществующий файл
is_local_attachment('http://example.com/fooo'); //> false

Список изменений

С версии 2.0.0 Введена.

Код is_local_attachment() WP 6.9

function is_local_attachment( $url ) {
	if ( ! str_contains( $url, home_url() ) ) {
		return false;
	}
	if ( str_contains( $url, home_url( '/?attachment_id=' ) ) ) {
		return true;
	}

	$id = url_to_postid( $url );
	if ( $id ) {
		$post = get_post( $id );
		if ( 'attachment' === $post->post_type ) {
			return true;
		}
	}
	return false;
}