Миниатюры для поста в WP 2.9 на практике
В продолжение прошлого поста про новую функцию wordpress 2.9 и создание превью для постов блога – сегодня немного практики. Раньше мы рассказали как активировать функцию для админки, теперь что же нужно использовать в коде шаблона дабы выводить результаты ее работы.
Атрибуты img для вывода превью
Допустим, мы хотим задать размер выводимого изображения миниатюры, а также специальный класс для картинки.
<?php the_post_thumbnail(array( 200,200 ), array( 'class' => 'alignleft' )); ?>
Можно использовать несколько классов либо добавлять другие атрибуты тега img как, например, переопределить alt – полезный для поисковиков.
<?php the_post_thumbnail('medium', array('class' => 'alignleft another_class')); ?> // задаем дополнительный класс <?php the_post_thumbnail('medium', array('class' => 'alignleft', 'alt' => 'alttext')); ?> // класс + атрибут alt
Для заголовка title изображения превью мы можем также использовать переопределение, если нам это нужно. Без упоминания этих атрибутов по умолчанию автоматически выведутся значения из заданного вами в Media Library при загрузке картинки.
<?php the_post_thumbnail('medium', array('class' => 'alignleft', 'alt' => 'alttext', 'title' => 'titletext')); ?>
Использование Media Settings
Есть в настройках wordpress блога такой раздел как «Медиафайлы» (Media Settings). Там можно указывать размер для миниатюрных изображений. Насколько я понимаю, если у вас есть блог с множеством зарегистрированных пользователей, то они могут эти настройки менять под себя. Так это или нет сказать сложно, но предлагаю научиться эти значения использовать при генерации миниатюр – мало ли пригодится для чего.
<?php $width = get_option('thumbnail_size_w') / 2; //получить указанную ширину превьюшки $height = get_option('thumbnail_size_h') /2; //получить указанную высоту превьюшки the_post_thumbnail(array($width, $height), array('class' => 'alignleft')); ?>
В тех же медиа настройках есть 2 других размера «средний» и «большой» с указаниями других величин ширины и высоты изображения. Чтобы их считать нужно юзать код:
<?php get_option('medium_size_w'); //ширина "среднего" изображения ?> <?php get_option('medium_size_h'); //высота "среднего" изображения ?> <?php get_option('large_size_w'); //ширина "большого" изображения ?> <?php get_option('large_size_h'); //ширина "большого" изображения ?> <?php get_option('thumbnail_crop'); //проверка на вырезание части изображения, On=1, Off=0 ?>
Совместимость с другими версиями Wordpress
Каждый «правильный» разработчик шаблона wordpress предусматривает его использование на разных версиях системы – с поддержкой виджетов или плагинов. В таком случае он добавляет в код проверки для совместимости шаблона, где при отсутствии той или иной функции включается стандартная обработка или вовсе ничего не происходит.
В нашем случае возникает еще одна проблема (задача) – что если шаблон и версия wordpress вывод миниатюр поддерживает, но они ведь не заданы во всех постах блога. На помощь нам придет код:
if ( (function_exists('has_post_thumbnail')) && (has_post_thumbnail()) ) { the_post_thumbnail(); } else { $postimage = get_post_meta($post->ID, 'post-image', true); if ($postimage) { echo '<img src="'.$postimage.'" alt="" />'; } }
Здесь первым делом проверяется поддержки функции превью для постов, а также наличие этой самой миниатюры. Если все гуд – картинка выводится, в противном случае будет использован другой вариант. В данном случае используется метод произвольных полей custom fields – считывается ссылка для поля с названием post-image. Хотя, конечно, здесь может быть любой другой используемый вами метод, тот же с получением первой картинки поста вполне подходит.
Есть, кстати, возможность получить первое изображение из библиотеки media library
if ( function_exists('has_post_thumbnail') && has_post_thumbnail() ) { the_post_thumbnail(); // @param: array(height, width) } else { // via mediathek $attachments = get_children( array( 'post_parent' => get_the_ID(), 'post_type' => 'attachment', 'numberposts' => 1, // show all -1 'post_status' => 'inherit', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ASC' ) ); foreach ( $attachments as $attachment_id => $attachment ) { echo wp_get_attachment_image( $attachment_id ); } }
Подробнее о методе можно почитать здесь.
Отображение миниатюр в RSS блога
Даже такое оригинальное решение нашел на одном из блогов. Я так подозреваю, что использоваться оно должно в том случае, если в RSS фид идет первая часть поста (анонс) без всяких там картинок и при этом нужно добавить миниатюру.
Автор рассказывает мол the_post_thumbnail – одно из любимых нововведений в Wordpress 2.9, но недавно он с ужасом обнаружил, что заданное превью не было включено в RSS блога. Собственно, для этого он предлагает добавить в файл functions.php немного полезного кода:
function insertThumbnailRSS($content) { global $post; if ( has_post_thumbnail( $post->ID ) ){ $content = '<p>' . get_the_post_thumbnail( $post->ID, 'medium' ) . '</p>' . $content; } return $content; } add_filter('the_excerpt_rss', 'insertThumbnailRSS'); add_filter('the_content_feed', 'insertThumbnailRSS');
Вот, как оказывается, все не просто с этими превью для постов в Wordpress 2.9.
Комментариев - 16 к статье “Миниатюры для поста в WP 2.9 на практике”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Плагин WPML – мультиязычность и локализация wordpress сайта
- Добавление кнопки Вконтакте, Facebook и Twitter в wordpress блог
- Оригинальные бесплатные шаблоны для Wordpress
- Улучшаем страницу с результатами поиска в wordpress
- Последние сообщения twitter в wordpress блоге
- Плагин jQuery Image Lazy Loader WP – постепенная загрузка изображений
- Отказ от PHP 4 и MySQL 4 для WordPress 3.2
- Добавление ссылок nofollow в blogroll блога
- Сервис keyCaptcha – интерактивная каптча для защиты от спама
- Убираем ненужный текст из атрибута title для ссылок категорий
- Безопасность (2)
- Видео (4)
- Возможности (28)
- Начинающим (11)
- Новости (14)
- Оптимизация (6)
- Плагины (29)
- Сервисы (6)
- Хаки и секреты (22)
- Шаблоны (7)

Категории:
Теги:
Спасибо за исчерпывающие примеры!
array(‘class’ => ‘alignleft’, ‘alt’ => ‘alttext’, ‘title’ => ‘titletext’)
alttext и titletext почему-то не работают. Так и выводятся как строки: alttext и titletext
Перспективный блоггер, спасибо за замечание. Похоже я неправильно понял автора англоязычной статьи и там эти alttext и titletext вроде как означают обычный текст, который можно указывать, если мы хотим переопределить значения данных полей картинки из медиа библиотеки. Непонятно правда зачем это нужно, возможно попытаться вставить в картинку тайтл поста или что-то такое.
Только что попробовал и если их не указывать, то заданные вручную значения альт и тайтл будут выводится автоматически.
То, что надо! Спасибо! Я че-т сам так не подумал попробовать. Сама функция просто класс, и в Рунете у тебя пока что у единственного внятное описание и отличные примеры! Спасибо за труды!
покажите хоть в работе это! а то две статьи про миниатюры и посты, а посмотреть что получается в итоге негде!
Yury, в работе нужно поискать где-то забугром, где новые шаблоны делают регулярно, я тестировал в блоге – все четко, но ставить пока не ставил, т.к. не было необходимости.
Показал бы, да сайт клиента, которому делал, сейчас почему-то временно недоступен. Как встанет – кину ссылку. Делал почти весь шаб с помощью этой функции миниатюр, работает блестяще. Разработка красивого шаблона облегчается в разы.
хм… не пойму, поч ругается wp:
Fatal error: Call to undefined function the_post_thumbnail() in в строчке с вызовом функции =\
Yury, как и обещал, демонстрирую в работе: _http://a1tv.com.ua/
Аналог популярного русского музыкального проекта. А ведь и не скажешь, что на ВП? ;)
Перспективный блоггер, да , выглядит очень даже недурственно. спасибо за пример
У меня несколько другой код вывода привьюшек, но вот в чем оказия, выводит не ту картику которую нужно, ставлю первую, а выводит следующию, подскажите как быть?
подскажите из-за чего может не работать функция смены title и alt у миниатюры? версия wp 2.9.1 миниатюры выводятся непосредственно таким кодом <a href="» target=»_self»> », ‘title’ => »)); ?>
мне необходимо вообще убрать значения тегов, чтобы при наведении на миниатюру ее не закрывала всплывающая подсказка. пробовал ставить разные значения alt и title, но все-равно выводится то, что было указано в админке.
блин не могу добавить код. в общем 100 раз его проверял, он точно такой же как у вас в статье
Алекс, может попробовать задавать пустые значения тайтлов:
Вставил ваш код и все стало ок. Оказалось, что у меня проблема была в том, что я не указывал атрибут размера в данном случае’medium’ почему-то думал, что он не обязательный.
если позволите, оффтопик небольшой, чтобы расставить для себя все точки над i.
можно ли так же сделать пустыми теги title и alt для фотографий в каждом отдельном посте. как я понимаю надо что-то в single.php наколодовать.