Новая функция WordPress 2.9 – превью для постов
Просмотрев парочку статей в русских блогах о WordPress и небольшие короткие заметки в англоязычных проектах относительно функции превью для постов в версии 2.9, я подумал, что тема достаточно простая и особо рассказывать там нечего. Но сегодня решил все же чуть более детально рассмотреть вопрос и, к моему удивлению оказалось, что там просто великое множество нюансов. Короче говоря, решил поделиться с вами всеми находками и составить самый подробный мануал относительно функции превью для постов (Post Thumbnail) в WordPress 2.9.
Изображения (превью, или также это называют миниатюра) для постов и страниц в блоге часто используются в различных журнальных (газетных) шаблонах, где для каждой статьи на страницах архива или главной выводится соответствующее изображение. В прошлом посте я рассмотрел возможность получения первой картинки поста с помощью самописной функции, но начиная с версии WordPress 2.9 разработчики решили значительно упростить задачу. Для этого была введена в эксплуатацию новая функция the_post_thumbnail(). Итак, как же ее включить, использовать и что можно сделать.
Активация функции the_post_thumbnail
Не знаю по какой причине, но для использования функции превью к постам необходимо ее сначала активировать. Для этого заходим в файл functions.php вашего шаблона и пишем там следующие строки кода:
if ( function_exists( 'add_theme_support' ) ) add_theme_support( 'post-thumbnails' ); |
После добавления данных строк в админке wordpress будет активирована возможность добавления превью. Проверка в коде используется для совместимости шаблона с разными версиями, чтобы если функции в вашей сборки не было, вся тема не «посыпалась».
Вы также можете добавить поддержку функции только для постов или страниц:
add_theme_support( 'post-thumbnails', array( 'post' ) ); // добавить для постов add_theme_support( 'post-thumbnails', array( 'page' ) ); // добавить для страниц |
Теоретически это может пригодиться с учетом того, что в WordPress вроде как можно добавлять свои типы записей. В общем, если вы хотите оставить что-то одно, то используйте нужную вам строку.
Следующий шаг от Mark Jaquith – установка размеры для ваших превью в шаблоне. Для этого имеется два разных подхода – ресайз или вырезание части картинки. Ресайз позволяет пропорционально уменьшать изображения для поста до указанных вами параметров. Например, у вас есть картинка 100х50, тогда при уменьшении до 50х50 вы фактически получите превью размером 50х25. Преимущество этого метода в том, что отображаться будет все изображение целиком. Плохо то, что в таком случае вы можете получить не всегда одинаковые картинки – ресайз будет производиться то по ширине, то по высоте. В таком случае можно немного «схитрить» и указать для неважной величины очень большое значение – допустим, ширину картинки поставить в 50, а высоту – 9999. В итоге вы получите все превью с шириной 50, что весьма органично впишется в любой дизайн:)
set_post_thumbnail_size( 50, 50 ); // ресайз до размерности 50х50 |
Второй вариант для размера изображений – вырезание части картинки до заданных вами параметров ширины и высоты. Преимущество этого метода в том, что вы получите то, что просите – вам не нужно беспокоится, что какой из величин превью будет меньше нужной для шаблона. Конечно, с другой стороны будет удалена часть изображения снизу или справа. Для этого используем такой код:
set_post_thumbnail_size( 50, 50, true ); |
Теперь после предварительных настроек можно использовать функцию the_post_thumbnail() в шаблоне, но об этом чуть позже.
Добавление превью (миниатюры) для поста
После активации функции в админке при написании постав вы увидите блок «Миниатюра записи», где можно будет загрузить картинку. После клика на ссылку появится стандартное окно добавления изображения (Add Media), где можно выбрать изображение со своего компа или уже имеющееся в галерее. При выборе картинки из галереи в самом конце страницы с настройками вы найдете ссылочку «Использовать как миниатюру» (Use as thumbnail) – кликаем, и все готово.
На странице после загрузки фото будет такая же ссылка. Если вы все сделали правильно, то превью отобразится в блоке «Миниатюра записи».
Вывод миниатюры (превью) в шаблоне блога
За отображение превью отвечает функция the_post_thumbnail, поэтому в каком-то из файлов шаблона, например, index.php мы пишем:
<?php the_post_thumbnail(); ?> |
Понятно, что использовать строку нужно в пределах цикла loop, которые выводит посты блога. В результате будет выведена миниатюра с размерами по умолчанию. Говорят, это все равно, что использовать код (хотя лучше без параметра):
<?php the_post_thumbnail('thumbnail'); ?> |
Я точно не уверен, но вполне вероятно, что понятие «по умолчанию» берется именно из тех строк, которые мы указывали при активации – это нужно проверять на практие. Можно также выводить миниатюры различных размеров, которые в WordPress создаются автоматически при загрузке картинки.
<?php the_post_thumbnail('medium'); ?> <?php the_post_thumbnail('large'); ?> |
Кстати, интересно, что Matt Mullenweg в комментариях на одном из блогов не рекомендовал использовать именные аргументы для функции как thumbnail и другие, но пока никак это не объяснил.
Еще можно добавить в код проверку наличия миниатюры в посте:
<?php if ( has_post_thumbnail() ) { // Есть! Выводим! } else { // Нет, нужно использовать другие варианты. } ?> |
Результатом вызова функции the_post_thumbnail() будет генерация тега <img /> с классом wp-post-image, для которого вы можете прописать некоторые настройки в CSS по типу рамки или чего-то подобного:
.wp-post-image { border: 2px solid #ccc; } |
За вторую часть поста спасибо автору данной полезной заметки. Поскольку пост получился немаленьким, то еще один подпункт статьи я вынесу в следующий пост. В принципе, имеющейся информации должно хватить, завтра я покажу парочку полезных примерчиков применения данной функции на практике. Кстати, там в проверке наличия прервью для поста я говорил о другом варианте. Для вывода изображений вполне можно использовать произвольные поля (custom fields) — как раз недавно об этом писал в своем основном блоге.
комментариев 66 к статье “Новая функция WordPress 2.9 – превью для постов”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Записи и посты wordpress, оформление записи (5,91 из 7, голосов - 47)
- Проблема с адаптивными изображениями в Gutenberg редакторе WordPress (3,87 из 7, голосов - 45)
- Умный копирайт в footer.php для wordpress (5,63 из 7, голосов - 30)
- Обновление плагинов и тем в WordPress: автоматическое, через FTP, скрытие уведомлений (5,19 из 7, голосов - 31)
- Polylang — плагин для мультиязычных сайтов на нескольких языках в WordPress (4,42 из 7, голосов - 31)
- Плагин TinyMCE Advanced – wordpress текстовый редактор (6,35 из 7, голосов - 20)
- Рубрики и категории wordpress, функция wp_list_categories (6,05 из 7, голосов - 20)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Интересно, почему по умолчанию функция не активирована?
SeoAdvicer, не знаю точно, может чтобы было глюков с шаблонами, которые далеко не все используют последние новшества 2.9. Хотя вообще нюансов с этими миниатюрами для постов немало — может разработчики что-то «мутят» :)
Как основная масса шаблонов будет переписана активируют.
Сделали хорошо, но вот не всем этот метод подойдёт. Если на блоге уже есть много постов, то придется вручную добавлять для каждого миниатюру. В таком случае лучше подойдёт «Получение и отображение первой картинки поста».
Лично я считаю последние нововведения WordPress ненужными большинству пользователей, в том числе и мне самому. До сих пор пользуюсь версией 2.7
Скрины примеров бы хотелось увидеть)
Ян, полностью согласен, с внедрением на старые проекты есть проблемка, но ее можно решить за счет совместного использования методов — типа если «есть картинка-прервью» — выводить ее, нет — брать первую с помощью функции.
dizelbox, последние версии wordpress — это не только «нововведения», а и много-много исправленных багов.
seofeel, не совсем понял про скрины)
В функции нету фигурных кавычек — лучше добавить для надежности.
Простите, меня больше интиресует вопрос как быть с блогерами кто ещё не перешёл на новую версию?? будет ли вообще работать функция?
А как активировать функцию в админке? У меня нет ничего похожего.
Может быть по этому при работе с изображением у меня нет ссылки «использовать как миниатюру»
add_theme_support добавил, но ничего не изменилось.
Может что-то еще надо сделать? Версия WP последняя
Евгений, add_theme_support добавляется в файле functions.php? Мне сложно сказать почему не работает, так как я активировал успешно с помощью нее.
RodgerFox, использовать альтернативные методы вывода превью.
Вставляю код в файл functions.php, тот, что с ВП идет, а не с темой, и после вставки кода
if ( function_exists( ‘add_theme_support’ ) )
add_theme_support( ‘post-thumbnails’ );
админка просто висит :( что делаю не так? Может надо еще что-то в код добавить, скобки какие-то иль еще что? Подскажите плз.
2 ElectroRat: а зачем вы его туда вставляете, а не функции темы?
Добавляю код в файл functions.php темы, и в админке ничего не появляется. Не могу понять, что делаю не так… версия ВП от Lecactus 2.9.1
Вот кусок кода :
/* ======================== ADMIN ========================================= */
// Hook for adding admin menus
add_action(‘admin_menu’, ‘theme_ads_add_pages’);
if(!get_option(‘theme_ads_block_number’))
{
add_option(‘theme_ads_block_number’, 4, »);
}
// action function for the_post_thumbnail
if ( function_exists( ‘add_theme_support’ ) )
add_theme_support( ‘post-thumbnails’ );
// action function for above hook
function theme_ads_add_pages() {
// Add a new submenu under Options:
add_options_page(‘Theme Ads’, ‘Theme Ads’, 8, ‘theme_ads’, ‘theme_ads_options_page’);
}
Пробовал и так
// action function for the_post_thumbnail
if ( function_exists( ‘add_theme_support’ ) )
{
add_theme_support( ‘post-thumbnails’ );
}
Результата не видно :(
Разобрался ! всем спасибо за внимание :)
Решил вопрос так, после всего кода в functions.php вставил отдельно
и все заработало.
Функция чудесная, но полноценно работает только в третей версии. во второй нужно сначала сохранять запись, или сохранять картинку и только потом делать миниатюру.
А можешь скрин сделать в нескольких вариантах? чтобы наглядно увидеть что где..
Спасибо за статью.
А можно ли как-то приспособить это дело к плагину, который выводит в конце поста ссылки на «похожие статьи», чтобы слева от каждой из них отображалась миниатюра?
Евгений, можно сделать все, что угодно если знаешь php и сможешь подредактировать код плагина или функции, которая выводит связные записи. Хотя также можно поискать плагин, который бы все это сделал за вас.
Спасибо за статью, то что надо!
Единственный момент который не хочет корректно работать это функция:
set_post_thumbnail_size( 100, 100, true);
Вместо того чтоб кропать картинку до заданный пропорций на выходе получаеться width = 10, а height = 100. Оригинал картинки длиннее по вертикали, то же и с thumbnail’ом, вместо того чтоб обрезать.
Заменил функцию на:
add_image_size(‘mini_thumbs’, 100, 100, true);
и поменял вызов thumbnail’ов в шабе на:
the_post_thumbnail(‘mini_thumbs’);
Стало выдавать более корректные пропорции для картинки: width=»79″ height=»100″,
но кропа как небыло так и нет.
Версия WP: 2.9.2
Подскажите в какую сторону копать?
PS. в админке в качестве превью картинки в меню создания thumbnail’а картинка автоматом кропаеться норм, но как thumbnail после нажатия «Use as thumbnail» подгружаеться криво кропнутая версия 10х100.
вопрос решен.
получаеться что если делать thumbnail из уже загруженных ранее в галлерею картинок не приаттаченных к текущему посту, то crop не работает, работает только масштабирование, а вот если создавать thumbnail загружая новую картинку.
…
потестив еще немного пришел к выводу:
кроп не работает на тех картинках, которые были загруженны до активизации add_theme_support( ‘post-thumbnails’ ); в шаблоне.
Добрый день!
Подскажите, пожалуйста, почему миниатюра не отображается в категориях, а отображается только на главной странице ( в анонсах)?
Tati, потому что нужно добавить отображения картинок-миниатюр и на страницы категорий (в файл archives.php) — они могут выводиться через файл архивов.
Все получилось — СПАСИБО!!!!!
И отдельное спасибо за оперативный ответ :)!
У меня превьюшки появляются обрезанные со всех сторон, т.е. видно только центр картинки. Как исправить, подскажите… Прописать размеры? На сколько понимаю, это у меня кусок в functions.php отвечающий за миниатюры :
$cpanel = new ControlPanel();
$theme_options = get_option(‘WpAdvNewspaper’);
function showthumb() {
global $theme_options;
if($theme_options[‘thumb’] == 1) {
echo get_the_image(array(‘Thumbnail’,’My Thumbnail’),’thumbnail’);
} else {
}
}
function showthumb_i() {
global $theme_options;
if($theme_options[‘thumb_sub’] == 1 && $theme_options[‘thumb’] == 1) {
echo get_the_image(array(‘Thumbnail’,’My Thumbnail’),’thumbnail’);
} else {
}
}
Дошел до того как активировать. активировал:
if ( function_exists( ‘add_theme_support’ ) )
add_theme_support( ‘post-thumbnails’ );
потом чуть ниже вставил
add_theme_support( ‘post-thumbnails’, array( ‘post’ ) );
и все далбше непойму как что делать???
можно понаглядней плиз…я тока учусь
Женя, почитай продолжение статьи про миниатюры для wordpress на практике — там примеры кода есть для вставки.
Спасибо, все работает )
А можно сделать так, чтобы превьюшка была кликабельна и вела на саму запись?