Использование произвольных полей (custom fields) в WordPress
Сначала расскажу о том, что такое произвольные поля (custom fields) для WordPress и как их использовать, а затем приведу парочку примеров для применения. Дело в том, что в некоторых своих блогах я весьма успешно использую эту конструкцию, поэтому решил поделиться с вашим хорошим советом. Итак, произвольные поля вы можете найти в админке WordPress в одном из блоков под текстовым редактором для создания новых записей или страниц. Выглядит он примерно следующим образом:
Здесь слева располагается имя поля, а справа его значение. В качестве имени вы можете выбрать несколько вариантов по умолчанию, у меня там было title, description, keywords. Кстати после заполнения значений плагина All in One Seo Pack для увеличение трафика с поисковиков все значения (заголовок, описание и ключевые слова) копируются в эти произвольные поля. То ли они просто дублируются, то ли можно обходиться без вышеупомянутого плагина, хотя, конечно, тот выполняет еще ряд полезных функций.
Так вот, в WordPress custom fields можно также добавлять свои поля. Для этого кликаем по ссылке «Добавить новое», вводим имя (ключ) — используем для этого только английские символы, а справа указываем значение поля, после чего нажимаем на кнопку «Добавить произвольное поле». Например, введем в поле значения некоторый текст по типу «hello world» и зададим ему имя mytext.
Следующим шагом является вывод произвольного поля custom fields в нашем WordPress шаблоне. Для этого используем функцию get_post_meta($post_id, $key, $single). Переменные здесь обозначают:
- post_id – ID поста, из которого берутся произвольные поля. Чаще всего использует значение текущей статьи, поэтому параметр равен $post->ID.
- key — имя произвольного поля.
- single – установлен в true, если требуется вывести единичный результат в виде строки. Значение false используется для отображения всего массива данных с произвольными полями. Чаще всего (в том числе и у нас в примере) используется true.
То есть заходим в шаблон WordPress блога, например, в файл единичного отображения поста single.php. Там после отображения текста статьи функцией the_content добавляем нужную строку для вывода только что созданного custom fields.
<div class="post"> <h1><?php the_title(); ?></h1> <?php the_content('') ?> <?php echo (get_post_meta($post->ID, 'mytext', true)); ?> </div> |
Функция echo выводит текст в php. После этого сохраняем шаблон и проверяем как работает наше произвольное поле – заходите на страницу и пост, где вы это поле добавили, ведь оно будет отображаться только там. Точно также для других статей потом придется заходить в текстовый редактор, но теперь уже не добавлять новое поле, а выбирать его из списка по имени.
Для чего же можно использовать произвольные поля (custom fields) в WordPress. Я могу назвать, по крайней мере, три разных варианта:
1. Вывод различного рода текстов для статей – автор, источник статьи, редакторы, используемая литература ну и любой другой текст, что теоретически может быть указан для поста. Зачем выводить текст, если можно добавить его в саму статью? – спросите вы. Все очень просто, с помощью произвольного поля вы сможете вывести его в любом месте шаблона, задав для него другое оформление. Иногда такие ситуации возникают.
2. Спонсорские ссылки и постовые. В последнее время все, кто заказывают постовые, хотят чтобы они транслировались на главную страницу блога, а у меня есть проекты, где там выводится только часть поста со ссылкой «Читать далее». В таком случае вы добавляете html код ссылки в custom fields.
После чего выводите его не только на странице с отдельным отображением поста, а еще и на главной. Для этого используется та же самая функция get_post_meta.
3. Последний вариант – это вывод картинки для поста. Иногда бывают ситуации, когда хочется сделать в шаблоне все красиво и аккуратно, чтобы для каждой статьи выводились картинки одинаковой ширины и высоты. Либо отображать рисунок, которого нет в тексте записи. Для этого также подойдут произвольные поля (custom fields) в WordPress. Для этого создаем поле с названием, например, mythumb, где в качестве значение указываем название изображения (его предварительно заливаем на фтп), а в шаблон добавляем код по типу:
<div class="entry"> <?php $mythumb = get_post_meta($post->ID,'mythumb', true); ?> <img src="http://mysite.com/wp-content/uploads/ <? echo strtolower($mythumb); ?>.jpg" width="100" alt="" /> <?php the_excerpt(); ?> </div> |
Здесь, кстати, используется немного другой принцип, когда значение произвольного поля считывается сначала в переменную $mythumb, а затем уже подставляется в нужное место – можно делать и так, и так, разницы нет никакой.
Вот, в принципе, и все. На последок могу подсказать одну полезную статью http://www.sonika.ru/blog/wordpress/custom-fields-wordpress.htm о произвольных полях (custom fields) в WordPress, где приведены еще примеры использования этой функции. Если будут какие-то вопросы, пишите в комментариях.
P.S. Постовой. Учите английский? Только наши курсы английского помогут Вам в обучении. Учите английский просто.
Мечтаете наблюдать за звездами? Купите телескоп и наслаждайтесь. Звезды станут ближе к Вам.
Очень странно, что нет варианта «делаем файлообменник на WP». Ведь реально дополнительное поле позволит без проблем добовлять ссылку вида «скачать…».
Отличная организация вывода дополнительной информации
richkeeper, спасибо за дополнение. Вот она сила комментирования — читатели помогают развить и расширить тему поста. Теперь вспоминаю, как на некоторых сайтах шаблонов вордпресс видел красивую ссылку скачать с иконками — видимо, через custom fields и сделана.
Нужно ещё учесть, что данные этих полей по умолчанию не транслируются в поток рсс. Нужно править файл, отвечающий за отдачу записей в рсс. Правда не проверял, сработает ли…
d9d9_Sun, хм, интересное замечание! Я как-то даже не обратил на это внимание, с одной стороны читатели rss ридера уж точно останутся без рекламы (постовых), но с другой не будет работать идея с полезным текстом (ссылкой на скачивание файла или именем автора). Придется действительно править файл.
До этой статьи не знал о существовании произвольных полей в WordPress. Насколько понял, их нельзя использовать вместо стандартных полей какой либо части CMS как, например в drupal. Весьма жаль. Штука весьма удобная, или может, есть какие либо модули для подобного функционала?
Полезная фишка. Раньше просто добавлял то что нужно в посто но теперь буду использовать поля. Спасибо!
Наверное дополнительными полями многие популярные блоги пользуются для вставки постовых… Это очень удобно таки…
Спасибо за подсказку как можно их использовать :)
А вот такой вопрос, для каждого поста при вставки тех же постовых придётся задавать разные «key – имя произвольного поля» или один раз можно для вставки постовых создать произвольное поле adv (например), а уж значение (где будут указываться рекламные ссылки) каждый раз задавать новое?
Andrew S, ключ создается один раз, после чего при публикации следующей статьи, выбираешь его из списка и вводишь уже другое значение.
Спасибо за ответ , Tod =)
Здравствуйте!
Я недавно начал осваивать ВордПресс.
Подскажите как сделать превью миниатюру видео с ютюба как здесь judovision.org?
Насколько я понимаю это сделано с помощью произвольных полей
Буду благодарен за ответ!
Виктор, об этом я рассказывал в статье вставка Youtube видео в wordpress шаблон — рекомендую почитать, найдете ответы на свои вопросы:) Хотя на указанном вами сайтов, насколько я понимаю превью делаются вручную, т.к. это картинки.
Всем добрый день. Подскажите пожалуйста как вывести в верхней части поста, там где автор, дата и т.д ссылку на определенные сайты. Пример — Источник — Вести.ру а под ним можно было бы ставить ссылку на источник статьи. Автор — Имя автора. Хотелось бы добавлять ссылки и имя автора с админ панели. Я так понимаю что тут связано с custom fields, тот код который у вас приведен выше у меня в шаблоне есть, но как его правильно использовать я не знаю. Не могли бы Вы мне помочь разобраться с этой не легкой но очень нужной для меня задачей. Если нужен код single.php могу выложить или отправить, только скажите куда.
Аркадий, информации в статье должно хватить для работы, можно еще немного поискать примеров использования custom fields. У меня, к сожалению, нет свободного времени на подробное изучения шаблона вашего сайта single.php и добавление туда нужного кода. Поспрашивайте на форумах по вордпресс, возможно, там подскажут конкретное решение.
Уважаемый Tod. Информации в вашей статье очень мало для того что бы сделать то что мне нужно, у вас в основном идет описание а не примеры создания определенного атрибута. За ответ спасибо.
Спасибо за статью. Как раз именно это я и искал.
Есть вопрос по поводу произвольных полей (custom fields) .
При установке плагинов, некоторые из них создают custom fields. После удаления плагина это поле все равно остается. Никто не сможет мне подсказать как ненужные поля убрать.
Очень интересная тема, тем более только начал изучать ВП. Меня интересует, как можно сделать на основе произвольных полей каталог фирм, чувствую что можно.
Нужные поля:
название фирмы
адрес
телефон
тел. моб
сайт
почта
описание фирмы
Алексей, для каталога, наверное, лучше использовать какой-то плагин дабы эти поля были физически представлены в базе данных в виде отдельной таблицы, произвольные поля добавляются как МЕТА описания поста, что не очень хорошо.
Также я бы советовал почитать про произвольные типы записей в вордпресс — тоже может пригодиться.
Все перерыл, на всех форумах написал. Все тихо. Наверное на ВП не строят каталоги :(
Даже на форуме поддержки wp не далт оьвет, а тут все так хорошо расписано.
странно вставил этот код: ID, ‘mytext’, true)); ?> таким как он есть, но результатов ноль, подскажите, может неправильно делаю?
clinoc11, еще разок внимательно повторите все шаги описанные в статье, код тестировал у себя лично — если они ничего не поменяли с прошлый версий wordpress, тогда все должно работать и вы просто где-то ошиблись.
Разобрался с произвольными полями,но из-за недостаточности знаний языка php не могу внедрить такую штуку,ID, ‘cena’,true )); ?> тут значение true это то что я вбиваю в окошко и оно успешно появляеться на сайте в нужном месте,мне бы хотелось задать строчку перед этим значению,,например пишу ключ cena значение 2грн.,а на сайте бы появлялось не просто надпись 2грн. а перед ней слово Цена: по умолчанию,как это сделать помогите пожалуста,буду безмерно рад..
Андрей, ну вот вы в каком-то месте шаблона указываете вывод функции _echo (get_post_meta(… так вот перед ним разместите слово «Цена» и все. Что-то вроде:
Ага,ага..приятно я думал не ответят спасибо,только вот размещать слово перед значением неправильно,это слово будет отображаться во всех постах,или я неправ??,цена должна быть забита после в разьеснении производной true.. Help my)))
Андрей, да, во всех постах. По сути custom fields и используются чтобы отображать какую-то информацию для всех записей, типа цены, картинки и т.п. Хотя, с другой стороны, если есть и «обычные посты», тогда нужно думать хак. На ум приходит 2 вещи — проверять условием какая на данный момент выводится категория — если ок, отображать слово цена. Второй — вместо вывода присвоить значение get_post_meta какой-то функции, а потом проверять — если пусто (не задано), то не выводить ничего, если задано, то добавлять цена + значение переменной.
А как вывести все записи относящиеся к определенному значению одного из полей? Например, поле есть STRANA, а одно значение его USA.
Здравствуйте!
Может быть, Вы поможете мне понять, в чем дело? НА моем сайте непонятно, по какой причине исчезла возможность добавлять комментарии. (в админке в нужных местах стоят галочки – здесь все ок). Загадка в том, что комментировать все же можно – но лишь некоторые статьи. Я пристально осмотрела, в чем их отличие от тех статей, где нет поля “комментарии”, и обнаружила наличие в статьях с комментариями заполненные “произвольные поля”. Весьма удивилась – не помню, чтобы я что-то заполняла! Их имена “arkayne-cache-post” , “arkayne-time-post” и “dsq_thread_id” – ни о чем мне не говорят, а в значении указаны цифры… ничего не понимаю, хочу, чтобы все статьи можно было редактировать, а как изменить это – не понимаю. А вы что думаете?
Joliat, увы, не подскажу, но я бы на вашем месте посмотрел таксономию — можно добавить свою категорию «страны» для записей и это будет более правильным чем произвольные поля.
Maruysa, комментарии можно отключать для конкретных постов, то есть в настройках ок, а для записи отключены (это как вариант). По поводу неизвестных полей — это все похоже на то что были установлены какие-то дополнительные плагины, которые и вызвали глюки, какой-то модуль связанный с названием arkayne. Я бы его отключил или вообще более подробнее посмотрел что там и как.
Добрый день! А может такое, что в записи не может быть произвольных полей? Хочу вывести картинки на главную, но никак не могу найти произвольных полей…
Luda, конечно, может. Произвольные поля это дополнительная не обязательная опция. По поводу картинок могу посоветовать почитать статью превью для постов — там рассматривается вариант их добавления в блог.
У меня нет произвольных полей WP 3.2 в чем дело не пойму?
Александр, сложно сказать, по идее должно все работать, хотя я бы обновил водрпресс до последней версии на всякий случай — это вообще полезно.
Как вставить значение произвольного поля после more?
Александр, для этого нужные какие-то хитрые php функции, так просто это не реализовать, если хотите разместить в контенте после more. Тоже как-то интересовался этим вопросом, было несколько англоязычных публикаций — можете поискать. Или, как вариант, использовать плагин, в частности WordPress Adman Plugin может добавлять определенный код внутрь текста поста, возможно, в его коде есть подсказка для решения вашей задачи.
а ларчик просто открывался
http://codex.wordpress.org/Function_Reference/the_content
$stripteaser
(boolean) (optional) Strip teaser content before the more text.
Большое спасибо за инфу!, а то два дня мучился…
подскажите пожалуйста как сделать данным методом вывод миниатюры картинки поста так чтоб картинка не уменьшалась а обрезалась по ширине и высоте
Artur, что-то похожее было в посте про получение и отображение первой картинки поста — фишка в том, что нужно картинку отображать в виде фона для элемента.
фишка в том что мне нужно сделать вывод картинки именно через произвольное поле
Artur, тогда это еще проще — берете код из той статьи (там где html) и вместо вставки ссылки на изображение через функцию добавляете считывание из произвольного поля. Например:
спасибо заработало, вот такой код у меня <div class="tumbr" style="width: 185px;height: 280px;background: url(ID, ‘mythumb’, true)); ?>) 0 0 no-repeat;»>
но осталась одна проблемка теперь не работает переход на полную запись при клике на превьюшку
почему-то мой код в комментарии отобразился неправильно
осталась одна проблемка теперь не работает переход на полную запись при клике на превьюшку пожалуйста помогите
у меня аналогичная проблема
Artur, Nikolas, тут вопрос больше к html и css — добавьте ссылку тег A вокруг картинки IMG или вокруг DIV, в котором находится эта картинка.. в общем нужно будет попробовать разные варианты и самом разобраться с кодами.
Всем привет.
Наконец-то победил произвольные поля на шаблоне imbalance 2. Хотел добавить цены к товару ниже миниатюр на главной странице. Опишу как сделал:
1. Создаём в записи, к которой надо добавить поле, собственно, произвольное поле))) Имя поля латиницей, значение можно в кирилице.
2. Идём в редактор темы, шаблон loop.php. Прописываем следующее:
cost — это имя поля
polecost — класс оформления
Место я нащупал методом тыка))) в итоге попал куда нужно — ниже миниатюры. Замечу, что в шаблоне imbalance 2 при наведении мышью, превью поста выделяется, описание можно вообще выключить, оставив лишь миниатюры. Так вот, произвольное поле также можно оставить с миниатюрами, можно убирать при наведении мышью, можно выводить всегда. В зависимости от этого, код пункта 2 вставляется в loop.php в определённое место, нащупаете моим методом)))
3. Идём в Список стилей (style.css) и задаём оформление, я сделал следующее:
#polecost {background: #e23000; color: #ffffff; text-align: center; font-size: 15px; font-weight: bold;}
Всё, данный пример отлично работает у меня на сайте.
Tod, вчера поставил чистый WP, а нету в нем custom fields. Пытался ставить как плагин — он вообще непонятный бред выводит. Как их установить блин??? Подскажете?
Евгений, пользовательские поля должны быть, как и плагин работает нормально и проверенно. Может быть проблема в шаблоне — некоторые темы у меня работали достаточно коряво.. хотя я бы еще перезалил ВП на всякий случай + поискал в гугле информацию по теме custom fields… давно с ними не работал.