Миниатюры и картинки постов
Начал изучать WordPress. Сверстал тему оформления на bootstrap 4.Сейчас "воюю" с выводом постов на главной,в категориях и архивах.
Чего пытаюсь добиться:
В functions.php добавил
function history_default_thumbnail() { if ( has_post_thumbnail() ): the_post_thumbnail(); else: print '<img class="img-fluid" src="'. get_bloginfo('template_directory'). '/images/no_image.jpg' . '" alt="no image" />'; endif; }
В основной цикл вставил вызов этой функции
<?php history_default_thumbnail(); ?>
Эта миниатюра выводится в любом случае,есть картинка в статье или нету,плюс к этому выводится и миниатюра и загруженная картинка.
Как решить,без плагинов:
- Если картинки в статье есть,то на главной,в категориях и архивах выводится загруженная картинка вместо миниатюры.
- Если картинки отсутствуют,то выводится миниатюра по-умолчанию.
- Убрать одновременный вывод и миниатюры и картинки.
В итоге получить такой вывод:
Признаюсь что в рнр я не очень и движок последний раз юзал во 2-й версии.
Проверяйте наличие вложений-изображений у страницы (исключая при запросе картинку, установленную в качестве миниатюры). Далее работайте с ID вложения.
Что-то типа:
Функция wp_get_attachment_image получит HTML код картинки в теге img, который выводите там, где нужно и когда нужно.
Я так понимаю что это надо добавить сюда
Правильно? И что вместо
надо вот так
Ага,вроде получилось.В index.php,search.php,category.php,archive.php добавил
С задачей вроде справились,только как изменить чтобы у загруженной к статье картинки гиперссылка вела на полную версию статьи,а не на саму картинку в полном размере.
вместо функции the_attachment_link используйте функцию the_permalink.
вместо картинки выводится ее адрес
потому что и вызывается адрес.
Функция для формирования html кода вложенной картинки - wp_get_attachment_image( $attachment->ID, $size, $icon, $attr )
т.е. строку echo the_attachment_link( $attachment->ID, false ); нужно заменить на echo wp_get_attachment_image( $attachment->ID, $size, $icon, $attr );
здесь переменная $size - зарегистрированное название размера (thumbnail, medium, large, full ....), либо массив с заданными размерами (array (width, height)). Назначение остальных параметров - по ссылке в ответе.
Если хотите залинковать картинку, то оберните полученный img в тег a
Ну что ж,все получилось как и требовалось.Огромное спасибо за подсказки в решении вопроса.В процессе решения заодно решил вопрос автоматического добавления класса для картинок (для адаптивности).В итоге вот такое готовое решение:
Чтобы к загружаемым картинкам автоматически добавлялся класс bootstrap v4 типа img-fluid,в functions.php добавил:
Ну вот как-то так.
атрибуты к изображению добавляются через параметр $args, передаваемый в функцию в виде массива.
в данном случае вызов функции будет выглядеть так:
Массив может содержать абсолютно любые атрибуты, которые требуется добавить в тег img (alt, title, itemprop, loading, data-* и т.д.)
Единственное, что в этом случае рекомендуется передавать в функцию все переменные. В примере размер картинки установлен в full (т.е. в исходном размере, как загружено). Вместо full подставьте нужный размер.