Как получить URL следующего/предыдущего изображение на странице вложения

Как получить URL следующего/предыдущего изображение на странице вложения | n-wp.ru
Как получить URL следующего/предыдущего изображение на странице вложения

Как получить URL следующего/предыдущего изображение на странице вложения

Многие вебмастера особо не заморачиваются с выводом изображений, используемых в статье, в полный размер, делегируя эту функцию плагинам. Есть множество отличных плагинов, которые показывают изображения в модальном окне, и создают слайд-шоу из этих изображений. Вот некоторые посты, посвященные этому:

И это далеко не полный перечень плагинов и скриптов, выводящих изображения поста в виде слайдера или в модальном окне, которые обозревались в этом блоге. Но мне всегда хотелось иметь более универсальный способ показа изображений в полный размер. Поэтому я стараюсь использовать уже имеющиеся возможности WordPress. Таким средством является вывод изображения в полный размер на отдельной странице, созданной с помощью системы шаблонов, которая обеспечивает вывод файлов, присоединенных к посту — файлов attachment.php или image.php, если речь идет конкретно об изображениях:

Шаблон image.php позволяет создавать отдельную страницу для вывода изображения, на которой вы можете делать все, что угодно: показывать изображение в полный размер, выводить его данные (размеры, формат, тип камеры, снявшей фотографию, место съемки, копирайт, и другие данные), название. Если к этому еще добавить навигацию по изображениям (ссылки на страницы предыдущего и следующего изображений), то получится удобный слайдер, на который можно попасть по ссылке.

В WordPress есть встроенные функции, с помощью которых можно вывести ссылки на страницы предыдущего и следующего изображений: previous_image_link(), next_image_link() и adjacent_image_link(). Функции удобные, но имеют один недостаток — они выводят уже готовый HTML-код ссылки. Я же привык работать с запчастями, то есть с данными, которые потом сам компоную в нужной мне последовательности.

В частности, с этими функциями мне не получилось прямым способом получить прямую ссылку на предыдущее изображение в оригинальном размере, чтобы использовать URL для создания фонового изображения средствами CSS3. Поэтому пришлось поколдовать и получить пользовательсткую функцию, которая извлекает данные о предыдущем и следующем изображении, в том числе и URL предыдущего/следующего изображения. Вот что получилось:

function adjacent_image_src($prev = true) {
    $post = get_post();
    $attachments = array_values( get_children( array( 'post_parent' => $post->post_parent, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID' ) ) );

    foreach ( $attachments as $k => $attachment ) {
        if ( $attachment->ID == $post->ID ) {
            break;
        }
    }

    $attachment_id = false;
    $src = false;

    if ( $attachments ) {
        $k = $prev ? $k - 1 : $k + 1;

        if ( isset( $attachments[ $k ] ) ) {
            $attachment_id = $attachments[ $k ]->ID;
            $src = wp_get_attachment_image_src( $attachment_id );
        }
    }

    return $src[0];
}

Этот код следует помещать в файл functions.php используемой вами темы. Функция adjacent_image_src() выводит URL предыдущего или следующего изображения.

У функции есть параметр $prev, указывающий, какой URL получать:

  • $prev = false — получать URL предыдущего изображения
  • $prev = true — получать URL следующего изображения (используется по-умолчанию)

Получить URL предыдущего изображения:


Пример использования URL предыдущего изображения:

<div style="background: url() no-repeat center center; background-size: cover;">
    

Код выводит ссылку на предыдущее изображение, расположенное в блоке с фоном, которым является предыдущее изображение.

Получить URL следующего изображения:


Пример использования URL следующего изображения:

<div style="background: url() no-repeat center center; background-size: cover;">