Онлайн заработок, создание и монетизация сайтов, веб-разработка, SEO и SMO продвижение, фриланс, партнерки, полезные сервисы вебмастерам, блоггинг.

Главная » WordPress » Использование произвольных полей (custom fields) в WordPress

Использование произвольных полей (custom fields) в WordPress

Сначала расскажу о том, что такое произвольные поля (custom fields) для WordPress и как их использовать, а затем приведу парочку примеров для применения. Дело в том, что в некоторых своих блогах я весьма успешно использую эту конструкцию, поэтому решил поделиться с вашим хорошим советом. Итак, произвольные поля вы можете найти в админке WordPress в одном из блоков под текстовым редактором для создания новых записей или страниц. Выглядит он примерно следующим образом:

произвольные поля WordPres

Здесь слева располагается имя поля, а справа его значение. В качестве  имени вы можете выбрать несколько вариантов по умолчанию, у меня там было title, description, keywords. Кстати после заполнения значений плагина All in One Seo Pack для увеличение трафика с поисковиков все значения (заголовок, описание и ключевые слова) копируются в эти произвольные поля. То ли они просто дублируются, то ли можно обходиться без вышеупомянутого плагина, хотя, конечно, тот выполняет еще ряд полезных функций.

Так вот, в WordPress custom fields можно также добавлять свои поля. Для этого кликаем по ссылке «Добавить новое», вводим имя (ключ) — используем для этого только английские символы, а справа указываем значение поля, после чего нажимаем на кнопку «Добавить произвольное поле». Например, введем в поле значения некоторый текст по типу «hello world» и зададим ему имя mytext.

custom fields WordPres

Следующим шагом является вывод произвольного поля 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. Постовой. Учите английский? Только наши курсы английского помогут Вам в обучении. Учите английский просто.
Мечтаете наблюдать за звездами? Купите телескоп и наслаждайтесь. Звезды станут ближе к Вам.

16.12.09

Категории: WordPress.

Теги: , , , , ,

81 Comments
  1. richkeeper

    Очень странно, что нет варианта «делаем файлообменник на WP». Ведь реально дополнительное поле позволит без проблем добовлять ссылку вида «скачать…».

  2. Sosnovskij

    Отличная организация вывода дополнительной информации

  3. Tod

    richkeeper, спасибо за дополнение. Вот она сила комментирования — читатели помогают развить и расширить тему поста. Теперь вспоминаю, как на некоторых сайтах шаблонов вордпресс видел красивую ссылку скачать с иконками — видимо, через custom fields и сделана.

  4. d9d9_Sun

    Нужно ещё учесть, что данные этих полей по умолчанию не транслируются в поток рсс. Нужно править файл, отвечающий за отдачу записей в рсс. Правда не проверял, сработает ли…

  5. Tod

    d9d9_Sun, хм, интересное замечание! Я как-то даже не обратил на это внимание, с одной стороны читатели rss ридера уж точно останутся без рекламы (постовых), но с другой не будет работать идея с полезным текстом (ссылкой на скачивание файла или именем автора). Придется действительно править файл.

  6. yarroha

    До этой статьи не знал о существовании произвольных полей в WordPress. Насколько понял, их нельзя использовать вместо стандартных полей какой либо части CMS как, например в drupal. Весьма жаль. Штука весьма удобная, или может, есть какие либо модули для подобного функционала?

  7. upgoing

    Полезная фишка. Раньше просто добавлял то что нужно в посто но теперь буду использовать поля. Спасибо!

  8. Twin

    Наверное дополнительными полями многие популярные блоги пользуются для вставки постовых… Это очень удобно таки…
    Спасибо за подсказку как можно их использовать :)

  9. Andrew S.

    А вот такой вопрос, для каждого поста при вставки тех же постовых придётся задавать разные «key – имя произвольного поля» или один раз можно для вставки постовых создать произвольное поле adv (например), а уж значение (где будут указываться рекламные ссылки) каждый раз задавать новое?

  10. Tod

    Andrew S, ключ создается один раз, после чего при публикации следующей статьи, выбираешь его из списка и вводишь уже другое значение.

  11. Andrew S.

    Спасибо за ответ , Tod =)

  12. Виктор

    Здравствуйте!

    Я недавно начал осваивать ВордПресс.
    Подскажите как сделать превью миниатюру видео с ютюба как здесь judovision.org?
    Насколько я понимаю это сделано с помощью произвольных полей

    Буду благодарен за ответ!

  13. Tod

    Виктор, об этом я рассказывал в статье вставка Youtube видео в wordpress шаблон — рекомендую почитать, найдете ответы на свои вопросы:) Хотя на указанном вами сайтов, насколько я понимаю превью делаются вручную, т.к. это картинки.

  14. Аркадий

    Всем добрый день. Подскажите пожалуйста как вывести в верхней части поста, там где автор, дата и т.д ссылку на определенные сайты. Пример — Источник — Вести.ру а под ним можно было бы ставить ссылку на источник статьи. Автор — Имя автора. Хотелось бы добавлять ссылки и имя автора с админ панели. Я так понимаю что тут связано с custom fields, тот код который у вас приведен выше у меня в шаблоне есть, но как его правильно использовать я не знаю. Не могли бы Вы мне помочь разобраться с этой не легкой но очень нужной для меня задачей. Если нужен код single.php могу выложить или отправить, только скажите куда.

  15. Tod

    Аркадий, информации в статье должно хватить для работы, можно еще немного поискать примеров использования custom fields. У меня, к сожалению, нет свободного времени на подробное изучения шаблона вашего сайта single.php и добавление туда нужного кода. Поспрашивайте на форумах по вордпресс, возможно, там подскажут конкретное решение.

  16. Аркадий

    Уважаемый Tod. Информации в вашей статье очень мало для того что бы сделать то что мне нужно, у вас в основном идет описание а не примеры создания определенного атрибута. За ответ спасибо.

  17. Сергей

    Спасибо за статью. Как раз именно это я и искал.
    Есть вопрос по поводу произвольных полей (custom fields) .
    При установке плагинов, некоторые из них создают custom fields. После удаления плагина это поле все равно остается. Никто не сможет мне подсказать как ненужные поля убрать.

  18. Алексей

    Очень интересная тема, тем более только начал изучать ВП. Меня интересует, как можно сделать на основе произвольных полей каталог фирм, чувствую что можно.
    Нужные поля:
    название фирмы
    адрес
    телефон
    тел. моб
    сайт
    почта
    описание фирмы

  19. Tod

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

  20. Алексей

    Все перерыл, на всех форумах написал. Все тихо. Наверное на ВП не строят каталоги :(

  21. clinoc11

    Даже на форуме поддержки wp не далт оьвет, а тут все так хорошо расписано.

  22. clinoc11

    странно вставил этот код: ID, ‘mytext’, true)); ?> таким как он есть, но результатов ноль, подскажите, может неправильно делаю?

  23. Tod

    clinoc11, еще разок внимательно повторите все шаги описанные в статье, код тестировал у себя лично — если они ничего не поменяли с прошлый версий wordpress, тогда все должно работать и вы просто где-то ошиблись.

  24. Андрей

    Разобрался с произвольными полями,но из-за недостаточности знаний языка php не могу внедрить такую штуку,ID, ‘cena’,true )); ?> тут значение true это то что я вбиваю в окошко и оно успешно появляеться на сайте в нужном месте,мне бы хотелось задать строчку перед этим значению,,например пишу ключ cena значение 2грн.,а на сайте бы появлялось не просто надпись 2грн. а перед ней слово Цена: по умолчанию,как это сделать помогите пожалуста,буду безмерно рад..

  25. Tod

    Андрей, ну вот вы в каком-то месте шаблона указываете вывод функции _echo (get_post_meta(… так вот перед ним разместите слово «Цена» и все. Что-то вроде:

    <?php the_content('') ?>
    Цена: <?php echo (get_post_meta($post->ID, 'cena', true)); ?>
  26. Андрей

    Ага,ага..приятно я думал не ответят спасибо,только вот размещать слово перед значением неправильно,это слово будет отображаться во всех постах,или я неправ??,цена должна быть забита после в разьеснении производной true.. Help my)))

  27. Tod

    Андрей, да, во всех постах. По сути custom fields и используются чтобы отображать какую-то информацию для всех записей, типа цены, картинки и т.п. Хотя, с другой стороны, если есть и «обычные посты», тогда нужно думать хак. На ум приходит 2 вещи — проверять условием какая на данный момент выводится категория — если ок, отображать слово цена. Второй — вместо вывода присвоить значение get_post_meta какой-то функции, а потом проверять — если пусто (не задано), то не выводить ничего, если задано, то добавлять цена + значение переменной.

  28. Joliat

    А как вывести все записи относящиеся к определенному значению одного из полей? Например, поле есть STRANA, а одно значение его USA.

  29. Maruysa

    Здравствуйте!
    Может быть, Вы поможете мне понять, в чем дело? НА моем сайте непонятно, по какой причине исчезла возможность добавлять комментарии. (в админке в нужных местах стоят галочки – здесь все ок). Загадка в том, что комментировать все же можно – но лишь некоторые статьи. Я пристально осмотрела, в чем их отличие от тех статей, где нет поля “комментарии”, и обнаружила наличие в статьях с комментариями заполненные “произвольные поля”. Весьма удивилась – не помню, чтобы я что-то заполняла! Их имена “arkayne-cache-post” , “arkayne-time-post” и “dsq_thread_id” – ни о чем мне не говорят, а в значении указаны цифры… ничего не понимаю, хочу, чтобы все статьи можно было редактировать, а как изменить это – не понимаю. А вы что думаете?

  30. Tod

    Joliat, увы, не подскажу, но я бы на вашем месте посмотрел таксономию — можно добавить свою категорию «страны» для записей и это будет более правильным чем произвольные поля.
    Maruysa, комментарии можно отключать для конкретных постов, то есть в настройках ок, а для записи отключены (это как вариант). По поводу неизвестных полей — это все похоже на то что были установлены какие-то дополнительные плагины, которые и вызвали глюки, какой-то модуль связанный с названием arkayne. Я бы его отключил или вообще более подробнее посмотрел что там и как.

  31. Luda

    Добрый день! А может такое, что в записи не может быть произвольных полей? Хочу вывести картинки на главную, но никак не могу найти произвольных полей…

  32. Tod

    Luda, конечно, может. Произвольные поля это дополнительная не обязательная опция. По поводу картинок могу посоветовать почитать статью превью для постов — там рассматривается вариант их добавления в блог.

  33. Александр

    У меня нет произвольных полей WP 3.2 в чем дело не пойму?

  34. Tod

    Александр, сложно сказать, по идее должно все работать, хотя я бы обновил водрпресс до последней версии на всякий случай — это вообще полезно.

  35. Александр

    Как вставить значение произвольного поля после more?

  36. Tod

    Александр, для этого нужные какие-то хитрые php функции, так просто это не реализовать, если хотите разместить в контенте после more. Тоже как-то интересовался этим вопросом, было несколько англоязычных публикаций — можете поискать. Или, как вариант, использовать плагин, в частности WordPress Adman Plugin может добавлять определенный код внутрь текста поста, возможно, в его коде есть подсказка для решения вашей задачи.

  37. Александр

    а ларчик просто открывался
    http://codex.wordpress.org/Function_Reference/the_content

    $stripteaser
    (boolean) (optional) Strip teaser content before the more text.

  38. Артур

    Большое спасибо за инфу!, а то два дня мучился…

  39. Artur

    подскажите пожалуйста как сделать данным методом вывод миниатюры картинки поста так чтоб картинка не уменьшалась а обрезалась по ширине и высоте

  40. Artur

    фишка в том что мне нужно сделать вывод картинки именно через произвольное поле

  41. Tod

    Artur, тогда это еще проще — берете код из той статьи (там где html) и вместо вставки ссылки на изображение через функцию добавляете считывание из произвольного поля. Например:

    <div class="tumbr" style="border: 1px solid #333; width: 140px;height: 110px;background: url(<?php ЗДЕСЬ КОД ВСТАВКИ ССЫЛКИ НА КАРТИНКУ ?>) 0 0 no-repeat;"> </div>
  42. Artur

    спасибо заработало, вот такой код у меня <div class="tumbr" style="width: 185px;height: 280px;background: url(ID, ‘mythumb’, true)); ?>) 0 0 no-repeat;»>

    но осталась одна проблемка теперь не работает переход на полную запись при клике на превьюшку

  43. Artur

    почему-то мой код в комментарии отобразился неправильно

  44. Artur

    осталась одна проблемка теперь не работает переход на полную запись при клике на превьюшку пожалуйста помогите

  45. Nikolas

    у меня аналогичная проблема

  46. Tod

    Artur, Nikolas, тут вопрос больше к html и css — добавьте ссылку тег A вокруг картинки IMG или вокруг DIV, в котором находится эта картинка.. в общем нужно будет попробовать разные варианты и самом разобраться с кодами.

  47. Максим

    Всем привет.
    Наконец-то победил произвольные поля на шаблоне imbalance 2. Хотел добавить цены к товару ниже миниатюр на главной странице. Опишу как сделал:

    1. Создаём в записи, к которой надо добавить поле, собственно, произвольное поле))) Имя поля латиницей, значение можно в кирилице.
    2. Идём в редактор темы, шаблон loop.php. Прописываем следующее:

    <div id="polecost">
    <?php echo (get_post_meta($post->ID, 'Cost', true)); ?>
    </div>

    cost — это имя поля
    polecost — класс оформления
    Место я нащупал методом тыка))) в итоге попал куда нужно — ниже миниатюры. Замечу, что в шаблоне imbalance 2 при наведении мышью, превью поста выделяется, описание можно вообще выключить, оставив лишь миниатюры. Так вот, произвольное поле также можно оставить с миниатюрами, можно убирать при наведении мышью, можно выводить всегда. В зависимости от этого, код пункта 2 вставляется в loop.php в определённое место, нащупаете моим методом)))
    3. Идём в Список стилей (style.css) и задаём оформление, я сделал следующее:
    #polecost {background: #e23000; color: #ffffff; text-align: center; font-size: 15px; font-weight: bold;}
    Всё, данный пример отлично работает у меня на сайте.

  48. Евгений

    Tod, вчера поставил чистый WP, а нету в нем custom fields. Пытался ставить как плагин — он вообще непонятный бред выводит. Как их установить блин??? Подскажете?

  49. Tod

    Евгений, пользовательские поля должны быть, как и плагин работает нормально и проверенно. Может быть проблема в шаблоне — некоторые темы у меня работали достаточно коряво.. хотя я бы еще перезалил ВП на всякий случай + поискал в гугле информацию по теме custom fields… давно с ними не работал.

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

Ваш e-mail не публикуется. Обязательные поля помечены *
Если вы комментируете впервые, то текст будет отправлен на модерацию.