# Функция ATTACHMENT_URL_TO_POSTID() │ WP 4.0.0
Функция attachment_url_to_postid() пытается преобразовать URL вложения в идентификатор записи.
## Хуки функции
- pre_attachment_url_to_postid
- attachment_url_to_postid
## Возврат значения
Возвращает целое число (int). Идентификатор записи, если найден, или 0 в случае ошибки.
## Использование
```php
attachment_url_to_postid( $url );
Параметры
- $url (string) (обязательный) — URL, который нужно обработать.
Примеры использования
Пример 1
$url = 'http://example.com/id_6643/proverka.html/prvoerka-vhodyashhih-dannyh';
$attachment_id = attachment_url_to_postid( $url ); // 0
$url = 'http://example.com/wp-content/uploads/2016/01/Prvoerka.jpg';
$attachment_id = attachment_url_to_postid( $url ); // 7704
$url = 'http://example.com/wp-content/uploads/2016/01/Prvoerka-80x80.jpg';
$attachment_id = attachment_url_to_postid( $url ); // 0
// Удаляем размер миниатюры (-80x80) из URL
$url = preg_replace( '~-[0-9]+x[0-9]+(?=..{2,6})~', '', $url );
$attachment_id = attachment_url_to_postid( $url ); // 7704
Пример 2: Пользовательская функция для получения ID вложения по URL
/**
* Получает ID вложения по его URL.
*
* @param string $url URI файла в любом формате, например, image.jpg.
*
* @return int ID вложения или 0.
*
* @version 1.2
* @author Kama (wp-kama.ru)
*/
function kama_attachment_url_to_post_id( $url = '' ) {
global $wpdb;
$url = filter_var( $url, FILTER_VALIDATE_URL );
if ( $url === false ) {
return 0;
}
$name = basename( $url ); // Имя файла
// Удаляем размер миниатюры (-80x80)
$name = preg_replace( '~-(?:d+xd+|scaled|rotated)~', '', $name );
// Удаляем расширение файла
$name = preg_replace( '~.[^.]+$~', '', $name );
$post_name = sanitize_title( $name );
// Запрос по полю поста post_name
$sql = $wpdb->prepare(
"SELECT ID, guid FROM $wpdb->posts WHERE post_name LIKE %s AND post_title = %s AND post_type = 'attachment'",
$wpdb->esc_like( $post_name ) .'%', $name
);
$attaches = $wpdb->get_results( $sql );
if ( ! $attaches ) {
return 0;
}
$attachment_id = reset( $attaches )->ID;
// Если найдено несколько вложений, выбираем нужное
if ( count( $attaches ) > 1 ) {
$url_path = parse_url( $url, PHP_URL_PATH );
foreach ( $attaches as $attach ) {
if ( false !== strpos( $attach->guid, $url_path ) ) {
$attachment_id = $attach->ID;
break;
}
}
}
return (int) apply_filters( 'kama_attachment_url_to_post_id', $attachment_id, $url );
}
// Примеры вызова функции
$id = attachment_url_to_post_id( 'http://test-wp.ru/wp-content/uploads/2017/02/Lighthouse.jpg' );
$id = attachment_url_to_post_id( 'wp-content/uploads/2017/02/Lighthouse.jpg' );
$id = attachment_url_to_post_id( 'oads/2017/02/Lighthouse.jpg' );
Примечания
- Глобальная переменная:
$wpdb — объект абстракции базы данных WordPress.
История изменений
- С версии 4.0.0 — Функция впервые была добавлена.