is_local_attachment()
Является ли переданный URL страницей вложения текущего сайта.
Используется, чтобы отличать медиафайлы из вашей медиабиблиотеки от внешних ссылок перед обработкой: генерацией превью, подстановкой srcset, оборачиванием в разметку и т.п.
Заметки
-
Возвращает
trueтолько для URL текущего сайта; внешние домены всегда дают false (включая CDN с другим доменом). -
Указанный УРЛ должен быть абсолютным с протоколом (http/https).
-
Если файл удалён физически, но запись-вложение есть в БД, результат все равно будет
true. - В мультисайтах проверка относится к текущему блогу: URL из другого блога считается внешним - вернет false.
Используйте attachment_url_to_postid(), чтобы получить ID вложения.
Хуков нет.
Возвращает
true|false.
Использование
if( is_local_attachment( $url ) ){
// это файл из медиатеки WordPress
}
- $url(строка) (обязательный)
- URL, который нужно проверить.
Примеры
#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() 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;
}