Функция attachment_url_to_postid()
в WordPress используется для преобразования URL вложения (например, изображения или другого файла) в идентификатор поста (ID). Это может быть полезно, когда необходимо получить метаданные или другие связанные данные о вложении, основываясь только на его URL.
attachment_url_to_postid( string $url ): int
Параметры:
$url
(string) — обязательный параметр, который представляет собой URL, который нужно разрешить.
Возвращаемое значение:
- int — Возвращает ID поста, связанного с вложением, или 0, если преобразование не удалось.
Использование
Функция attachment_url_to_postid()
извлекает ID вложения, которое соответствует переданному URL. Чтобы функция работала корректно, необходимо передавать URL на оригинальное изображение или файл, а не на миниатюру.
Пример 1: Получение ID вложения из URL
$attachment_url = 'https://example.com/wp-content/uploads/2024/10/my-image.jpg';
$attachment_id = attachment_url_to_postid( esc_url( $attachment_url ) );
if ( 0 !== $attachment_id ) {
printf( esc_html__( 'ID вложения: %d', 'textdomain' ), $attachment_id );
} else {
esc_html_e( 'Вложение не найдено по указанному URL.', 'textdomain' );
}
Этот код проверяет, существует ли вложение по заданному URL, и выводит его ID, если оно найдено.
Пример 2: Обработка URL с миниатюрами
$url = 'https://example.com/wp-content/uploads/2024/10/my-image-150x150.jpg';
$attachment_id = attachment_url_to_postid( $url ); // Вернет 0, так как это URL миниатюры
// Удалим размер миниатюры из URL
$url = preg_replace('~-[0-9]+x[0-9]+(?=\..{2,6})~', '', $url);
$attachment_id = attachment_url_to_postid( $url ); // Теперь вернет ID вложения, если оригинал существует
В этом примере мы сначала пробуем получить ID из URL миниатюры, что возвращает 0. Затем мы удаляем размер миниатюры и снова вызываем функцию.
Пример 3: Функция для получения ID вложения через URL
Вы также можете создать свою функцию для извлечения ID вложения. Вот один из вариантов:
function custom_attachment_url_to_post_id( $url = '' ) {
global $wpdb;
$url = filter_var( $url, FILTER_VALIDATE_URL );
if ( $url === false ) {
return 0;
}
$name = basename( $url ); // Получаем имя файла
$name = preg_replace('~-(?:\d+x\d+|scaled|rotated)~', '', $name); // Удаляем размер миниатюры
$name = preg_replace('~\.[^.]+$~', '', $name); // Удаляем расширение
$post_name = sanitize_title( $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
);
$attachments = $wpdb->get_results( $sql );
if ( ! $attachments ) {
return 0;
}
$attachment_id = reset( $attachments )->ID;
// Проверяем, найдено ли несколько вложений
if ( count( $attachments ) > 1 ) {
$url_path = parse_url( $url, PHP_URL_PATH );
foreach ( $attachments as $attach ) {
if ( false !== strpos( $attach->guid, $url_path ) ) {
$attachment_id = $attach->ID;
break;
}
}
}
return (int) apply_filters( 'custom_attachment_url_to_post_id', $attachment_id, $url );
}
// Примеры вызова функции
$id1 = custom_attachment_url_to_post_id( 'https://example.com/wp-content/uploads/2024/10/my-image.jpg' );
$id2 = custom_attachment_url_to_post_id( 'wp-content/uploads/2024/10/my-image.jpg' );
$id3 = custom_attachment_url_to_post_id( 'uploads/2024/10/my-image.jpg' );
Заключение
Функция attachment_url_to_postid()
является мощным инструментом для работы с вложениями в WordPress, позволяя легко получать ID вложений по их URL. Это полезно в различных сценариях, таких как создание галерей, обработка медиафайлов и взаимодействие с пользовательскими данными.