Дополнительные поля wordpress постов
Каждый, кто пишет посты в wordpress, наверняка ни раз видел на странице редактирования или добавления нового поста панель, которая называется “Дополнительные поля”.
В первую очередь они предназначены для заполнения meta-полей вроде Title, Keywords или Description. Но на самом деле, область их применения можно значительно расширить.
Например, у нас на блоге каждый пост начинается с небольшой картинки, которая дает понять, о чем будет идти речь в посте. Чтобы вставить эту картинку в пост, нам нужно каждый раз добавлять в начало статьи небольшую таблицу, в одной ячейке которой будет картинка, а в другой – небольшой кусок текста.
Используя дополнительные поля для постов, и немного изменив нашу wordpress тему, мы можем заменить этот механизм на более удобный. Вместо таблицы мы будем просто указывать имя файла картинки в дополнительном поле.
Итак, приступаем. Начнем с выбора имени дополнительного поля, которое будет содержать имя картинки. Пусть оно будет называться image, а все картинки будут храниться в папке images, в корневой директории вашего сайта.
Теперь переходим к редактированию wordpress темы. Везде, где нужно выводить основной текст статьи, нужно добавить вывод картинки перед этим текстом.
В моем случае внутри цикла
<?php while (have_posts()) : the_post(); ?>
Есть кусок кода, который отвечает за вывод основного текста:
<div class="entry"> <?php the_content('Читать далее »'); ? > </div>
Выведем туда нашу картинку:
<div class="entry"> <?php if('' !== get_post_meta($post->ID, 'image',true) ) { $width = getimagesize('https://i-novice.net/images/'.get_post_meta($post->ID, 'image',true)); $width = $width[0]; ?> <div class="HeaderImage" style="width:<?php echo $width?>px"> <img src="https://i-novice.net/images/<?php echo get_post_meta($post->ID, 'image',true) ?>" /> </div> <?php } ?> <?php the_content('Читать далее »'); ?> </div>
Перед тем, как вывести изображение, вычисляется его размер (длина) – это нужно для корректного отображения картинки внутри блока.
А стиль HeaderImage очень простой:
div.HeaderImage { float:left; padding:5px; }
Он нужен только для того, чтобы текст обтекал его по правому краю.
Преимущество такого метода вывода изображения в том, что для изменения отображения всех изображений, изменить код нужно будет только в одном месте. Результат работы этого кода можете увидеть на этом блоге. Так что пользуйтесь приемом 😉
P.S.: Для того, чтобы картинки показывались на всех страницах блога, не забудьте прописать вывод в шаблонах archive.php и single.php (или еще какие-то).
Удачи и до встречи!
Novice.
Очень полезный пост. Давно хотел разобраться с произвольными полями.
Странно, а у меня не отображаются дополнительные поля в RSS… Как поправить?
Всё это конечно хорошо, если ты пользуешься набором текста в админке блога, а если я например (как белый человек) пользуюсь оффлайн-редактором. В одном случае это Zoundry, в другом это WLW и всё. Все преимущества этих полей отпадают…
2 Avdenago: По-умолчанию в rss-ленте выводятся только определенные поля (заголовок, линк, краткое описание и т.д.). Чтобы там появились дополнительные поля нужно дописывать это в файле, которые генерирует rss (wp-includes/feed-rss2.php). Выводить их там скорее всего так же как и в примере, который в этой статье рассматривается.
2 Охотник на зелёных: Тут уж ничего не поделаешь. Как говориться - всегда приходится выбирать
Спасибо, попробую.
Собственно возник такой вопрос, я запихал цикл while в сайдбар и там вставил get_post_meta, не работает… я так понимаю это связано с какими-то ограничениями, может быть вы сталкивались?
Опиши точнее ошибку плз. Выведи через echo промежуточные результаты и т.д. возможно сам догадаешься где ошибка. Сам с такой ошибкой не сталкивался..
TuTbaker, надо смотреть. Мне так кажется, что данный вывод - он работает только в цикле (loop) вывода записи. Так как идет вывод дополнительного поля по айди записи…
Способ очень интересный. Я хочу сейчас подумать, как сделать каждой статье уникальную картинку, которая будет высвечиваться вместо “Читать далее”. В принципе, много изменять тут не придется.
Единственное, в чём способ не очень удобный, это загрузка картинок - постоянно же придется вручную загружать по FTP в папку images картинки.
Вот бы как-то сделать, например загружаешь к посту обычным образом картинку с определенным именем, в пост её не вставляешь, но её подбирает скрипт
Шаг 1. Для начала – обрежем лишнее. Выделяем необходимый нам фрагмент и выбираем пункт меню «Изображение» «Откадрировать в выделение»:
Спасибо автору. Хорошие статьи о wordpress. Вот если бы вы еще перевели хорошую статью о своем типе данных будет вообще отлично. На русском нет, не чего хорошего на эту тему.
Уважаемый автор, подскажите, есть ли плагин который будет находиться на дополнительном поле, и будет загружать картинки напрямую с компа без разных прописей, и при этом ресайзить до нужного размера?