Вот как бы выводить миниатюры в ленте блога

Только что прочитал в wordpressinside о новой функции the_post_thumbnail в вордпресс 2.9 (которого здесь пока нет, кстати), её можно использовать для простого вывода превьюшек одного из присоединенных к посту изображений.

А я как раз вчера думал об использовании этой возможности для сайта одного из клиентов. Про the_post_thumbnail ещё не знал, знал о wp_get_attachment_image. Но решил таки отказаться от этого способа вывода превьюшек постов из-за того, что он потребует дополнительный запрос к базе данных на каждый пост. Например, если у вас выводится по 10 постов на ленте (которые извлекаются за один запрос к базе MySQL), значит, для извлечения данных каждой превьюшки потребуется 10 дополнительных запросов — это уже может быть как бы много, а с некоторых особо экономных хостингов вас могут и попросить за «неоптимизированные скрипты». Возможно, именно поэтому по умолчанию эта возможность отключена.

Также думал и про custom fields — это, видимо, лучшее решение в смысле оптимизации, потому что записи и их дополнительные поля, скорее всего, извлекаются из базы одним запросом (надо бы уточнить, кстати). Но такой способ может быть не слишком удобен для заказчика: вписывать вручную адрес превьюшки, который надо откуда-то копировать — как бы лишняя работа.

В итоге придумал третий вариант: за один запрос извлекаю из базы все записи типа attachment, затем пробегаюсь по нему — создаю массив, содержащий только первый attachment для каждого поста, а в цикле wordpress использую элементы этого массива.

А пока писал всё это, придумался и четвёртый — автоматизация второго: ведь можно создавать дополнительные поля к записи в момент её сохранения: если есть аттачменты, берём превьюшку первого из них и прописываем её как дополнительное поле. Думаю, что это получится реализовать через плагин, и править файлы движка не придётся.

Добавить комментарий

Ваш email не публикуется. *
Можно использовать эти HTMLтэги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>