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

Wednesday, 16 Dec 09 в 1:55

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

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или twitter для блоггеров и вебмастеровtwitter!
Добавить комментарий

Комментариев - 30 для данного поста

  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. Я бы его отключил или вообще более подробнее посмотрел что там и как.

Оставить комментарий (правила комментирования)