Функция ATTACHMENT_URL_TO_POSTID() в WordPress 4.0.0

# Функция 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 — Функция впервые была добавлена.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *