Создание дополнительных полей в WordPress

Вернуться
Опубликовано: 19.06.2015 г.

Пользователи популярной CMS WordPress при ведении блогов часто сталкиваются с необходимостью добавлять в каждый пост похожую информацию, например, в кулинарном блоге это может быть набор продуктов и время готовки, в спортивном – участники соревнования и счет, в туристическом – ближайший аэропорт, стоимость проживания и т.д. Конечно, можно каждый раз при добавлении записи указывать и эти данные, настраивать их отображение, место на странице и т.д. А можно создать готовый набор полей, заполнять их нужными значениями, а WP уже сам правильно вставит их в готовую статью. Проще говоря, речь идет о создании пользовательских metaboxes, наподобие встроенных Категории, Метки, Ключевые слова и проч. К сожалению, стандартными свойствами добавить свои поля нельзя, но в виде дополнительной функции реализовать возможно. Об этом и пойдет речь в статье.

Добавление собственной дополнительной зоны

Чтобы наша функция стала работоспособной и ее «заметил» движок, нужно добавить информацию о ней в function.php – главный файл со всеми функциями в WP. Переходим в конец файла и добавляем что-то вроде такого:

Здесь, как видно, мы задаем саму функцию my_meta_box(), аргумент $context, который указывает, где будет находиться содержание создаваемых полей, и его значение – normal, что означает, что поле будет ниже редактора записи.

Создание новых полей

Когда функция обозначена, можно начинать добавлять непосредственно новые поля. Делается это путем добавления массива, где каждый элемент указывает тип поля, его описание, название. Следите за тем, чтобы все идентификаторы полей имели уникальные значения, которые не совпадают с уже существующими в системе.

По такому принципу можно добавлять неограниченное количество полей – столько, сколько вам потребуется.

Выводим поля на экран

Теперь пришла пора вывести созданные поля на экран. Для этого будет использоваться заданная нами ранее функция my_meta_box(). Выглядеть она будет так:

Вначале выводится скрытое поле с проверочным кодом, которое должно защитить сайт от  межскриптовых атак. После этого запускается цикл, поочередно перебирающий значения из массива, созданного в предыдущем шаге. Полученные значения будут проверяться на предмет того, выведены они уже или нет, после чего с помощью конструкции switch-case выведутся на экран. Каждый case сначала получает тип поля, после чего отрисовывает его, используя HTML-теги: для text используется простой <input>, для textarea — <textarea> и т.д.

Последний этап – это сохранение введенных значений в новосозданные поля. Для этого напишем еще одну функцию, которая в качестве аргумента будет принимать идентификатор поста $post_id.

Если старое значение существует, оно сохраняется в переменной $old, новое записывается в $new, более свежие данные перезаписывают старые, а если в поле ничего не занято, удаляем его значение. Как видно, используются конструкции if-elseif и циклы.

Вывод значений полей на странице

Когда всё готово, осталось только задать расположение значений полей на сайте. Делается это благодаря движку WP очень просто, нужно играться с запросами в базу и т.д. Все решается несколькими строчками кода:

Вставляется этот код в то место на странице, где вы хотите. К нему можно применять любое оформление, стили и т.д. – как к обычному HTML-коду. И теперь в каждом новом сообщении будут выводиться и значения наших метаполей, если они были заданы при публикации.

Как видите, добавить свои дополнительные поля в WordPress – дело 30-40 минут, а это решение сохранит потом кучу времени, сил и нервов.

1649 5

5 комментариев на «“Создание дополнительных полей в WordPress”»

  1. Alex:

    А можно готовый код с case и ?
    а то я туплю и ничего не получается..

    • Администратор:

      К сожалению готового нет. Что не получается?

      • Alex:

        Я не силен в php, возможно просто ошибаюсь в синтаксисе.
        Если я правильно понял switch нужно дополнить конструкцией
        case : echo ;
        жаль что html запрещен, скинул бы код…

  2. Alex:

    блин сайт у вас вообще все спец символы удаляет..
    конструкция
    case тип : echo ‘инпут соответствующего типа’;
    case тип2 : echo ‘инпут типа 2’;

  3. Андрей:

    В частности, именно поэтому под WordPress написано так много плагинов — все очень просто, нужно лишь знать азы PHP и понимать принцип работы системы. Каждый, кто достаточно близко знаком с WordPress неоднократно встречался с понятием «произвольные поля» и с их помощью решал некоторые нетривиальные задачи.

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

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