Произвольные поля wordpress как вывести

Очень часто необходимо добавить к записи, странице произвольные данные и вывести в шаблоне.
В этом нам поможет стандартный функционал в WordPress “Произвольные поля”, можно конечно воспользоваться и дополнительными плагинами, но дабы не перегружать систему, для текстовых данных к примеру или вывода ссылки, путь к изображению хватит и стандартного функционала, тем более делается это очень просто.

В консоли заходим в необходимую запись, внизу есть “Произвольные поля”, нажимаем возле имени “Введите новое” и вписываем имя поля, а в правой ячейке с названием “Значение” вписываем данные которые необходимо отобразить.

Для создания еще одного поля нажимаем “Добавить произвольное поле” и проделываем все, что описано ранее.

Если вдруг у вас не отображается блок “Произвольные поля” на странице добавления новой записи или страницы, то отображение необходимо включить в настройках экрана(кнопка находится в правом верхнем углу на странице записи):

В шаблоне записи (single.php) или в шаблоне страницы (page.php), которые находятся в папке с шаблоном по адресу:
корень_сайта/wp-content/themes/название_выбранного_шаблона/

вставляем в необходимых местах код:

Где вместо pole вставляем имя поля и в итоге выведется введенное значение.

Так же можно вывести и в content-single.php, который находится в
корень_сайта/wp-content/themes/название_выбранного_шаблона/template-parts/

Или в любом кастомном шаблоне,
Так же можно вывести в рубрике(категории), где выводятся подряд все записи, то есть у каждой записи будут свои значения отображаться.

К тому же Вам не надо создавать у каждой записи, страницы одни и теже поля для вывода, достаточно выбрать в выпадающем списке ранее созданные поля(у других записей/страниц) и только прописать новое значение. Достаточно удобно.

Если у Вас что-либо не получается — можете задать вопрос в комментариях.

Чтобы не создавать произвольные поля полностью в ручную, используйте мой PHP класс для удобно создания метаполей записи.

Чтобы вывести подобный блок для элементов таксономий, смотрите описание события: (taxonomy)_edit_form_fields. Также смотрите ответ на вопрос: Метаполя для рубрик (таксономий) в WordPress

В в одная часть

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

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

Произвольные поля в WordPress — очень удобный инструмент, когда нужно «прикрепить» к конкретному посту какие-либо дополнительные данные. Такими данными может быть что угодно, начиная от логических true/false (1/0), заканчивая объемными текстами, массивами и прочим. К примеру, мы можем создать новое произвольное поле Title и в его значение написать текст (альтернативный заголовок поста), затем в коде шаблона использовать следующий код, чтобы вывести этот текст:

Следует отметить, что функцию get_post_meta() можно использовать за пределами Цикла WordPress, т.е. где угодно в шаблоне. В данном примере мы используем её в части документа, чтобы дать html странице заголовок отличный от заголовка самой статьи (иногда полезно для SEO).

Другой пример: используя произвольные поля мы можем выполнять или не выполнять действия, в зависимости от того, какие данные у нас находится в значении произвольного поля. Например, размещая в произвольное поле логические цифры 1 или 0 мы можем выводить или не выводить какую-либо информацию для текущего поста.

Читайте также  Программа для камеры sony handycam

Произвольные поля используются в WordPress сплошь и рядом, различными плагинами оценки постов (WP-PostRatings), SEO плагинами (Platinum SEO Pack), позволяющими указать Title, Description, Keywords поста, моим плагином для создания миниатюр (Kama Thumbnail) и многими другими плагинами. Образно говоря, каждая четвертая нестандартная задача решается посредством произвольных полей, поэтому если вы еще не знаете как их использовать, то ознакомьтесь с этим мануалом. А ниже мы поговорим о том, как создать отдельный блок с нужными нам произвольными полями и как сделать это без плагинов.

Мало кто знает, что если создать произвольное поле ключ которого (название) начинается на _ (нижнее подчеркивание), например _my_special_key , то такое поле не будет выводиться в выпадающем списке произвольных полей при редактировании постов и будет считаться "внутренним" произвольным полем, которое используется системой. Создать такое поле можно только запросом к БД, например, используя функции add_post_meta() или update_post_meta().

Прежде чем начать создание

Забегая вперед, скажу что нижеследующие описание будет полезно, только тем кто хоть немного разбирается в HTML, т.е. если вы совсем не в зуб ногой в HTML и PHP, то читать все что ниже — пустая трата времени.

Предположим, что мы делаем сайт на заказ, и при этом на сайте используются произвольные поля. Объяснять заказчику, какое поле выбирать из списка, чтобы добавить ту или иную информацию к посту, проблематично, к тому же это быстро забывается. Именно поэтому уже давно написаны плагины, благодаря которым можно легко создать блок произвольных полей, где не нужно выбирать поле (ключ), и только потом вписывать значение. В таких блоках нужно сразу вписывать значение и есть возможность описать каждое поле, при одном взгляде на которые становится понятно его назначение. Блок, который мы сейчас создадим будет выглядеть так:

А данные такого блока в самих произвольных полях, после сохранения поста, будут записаны так:

Что мы видим? — Ненужные для посторонних глаз ключи произвольных полей (о них я говорил выше), которые к тому же нужно еще и выбирать из выпадающего списка (а их там может быть совсем не 4, а куда больше. ): description , robotmeta , select и title . Разумеется, создать мета блок произвольных полей — отличная идея.

Создаем мета блок произвольных полей

Для создания метаблока нам понадобятся всего 2 хука: add_meta_boxes и save_post, функция add_meta_box() и некоторые знания html и php . Добавляем следующий код в файл темы functions.php :

#1. Создадим новый мета блок для постов

Назовем его "Дополнительные поля":

#2. Заполним этот блок полями html формы

Делается это через, указанную в add_meta_box() функцию extra_fields_box_func() . Именно она отвечает за содержание мета блока:

Все названия полей я оформил в массив extra[] , чтобы потом проще было обработать эти данные.

Спрятанное поле name="extra_fields_nonce" , нужно для проверки при сохранении данных.

#3. Сохраняем данные

На этом этапе, мы уже создали блок произвольных полей, теперь нужно обработать данные полей при сохранении поста. Обработать, значит записать их в в базу данных или удалить от туда. Для этого используем хук save_post, который срабатывает в момент сохранения поста. В этот момент мы получим данные из массива extra[] и обработаем них:

Вот и все, блок произвольных полей готов!

Теперь, изменяя html код, мы можем редактировать содержимое мета блока. Но не забываем, что названия полей имеют вид массива со значением ключа произвольно поля: name="extra[meta_key]" .

Блок произвольных полей для произвольного типа записей

Если нужно создать блок для другого типа записей, допустим page (для страниц), то регистрируем еще один мета блок и описываем его html код в новой функции, которую так же нужно указать при регистрации блока ( extra_fields_box_page_func ). Функцию обработки полей при сохранении поста создавать уже не надо, главное указать названия полей в виде массивов extra[] :

Читайте также  Синдзи миками игры список

Сложности с типом checkbox

Недостатком такого метода является то, что массив extra[] , обязательно должен быть определен, пусть даже он передает пустое значение иначе поле не будет обработано при сохранении данных. В связи с этим, возникает проблема при использовании типа checkbox : , потому что checkbox передает данные только, если галочка выставлена и вообще ничего не передает, если галки нет. А нам нужно чтобы он передавал пустое значение, чтобы код удалял значение, если оно было сохранено до этого.

Чтобы обойти этот "недуг" я сделал так: перед полем чекбокса создаем hidden поле с name как у чекбокса и пустым значением. И получается, если галочка стоит, то значение hidden поля перебивается, если галки нет, то берется пустое значение hidden поля.

Т.е. checkbox нужно вызывать так:

Такой же трюк иногда может пригодится и для поля с типом radio.

Пример реального кода с типами checkbox:

Еще один пример создания метабокса (ООП)

Этот пример показывает как создать одно поле, в котором будет храниться массив данных. Массив можно расширять или уменьшать через нажатие на + или удалить (работает на скрипте).

Это пример создание поля "повторитель", как у плагина ACF (поле repeater в платной версии).

В результате получим такой метабокс:

Плагины для создания блоков произвольных полей

В статье я говорил о плагинах, которые создают мета блоки заменяющие произвольные поля, но ни разу не упомянул ни один. Исправляюсь:

Advanced Custom Fields (ACF) — пожалуй, самый популярный и гибкий плагин для создания произвольных полей. С хорошей документацией.

Custom Field Suite — похож на ACF, только менее навороченный.

Carbon Fields — похож на ACF только без визуальной настройки, все делается в коде. Хорошо подойдет для разработчиков. Бесплатный.

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

Custom Field Template — настоящий комбайн. С ним можно создать любую форму, для любых типов постов, указать формы для отдельных постов и рубрик. Думаю в большинстве случаев, можно обойтись без такого комбайна.

  • kc-settings — ураган а не плагин, хоть и не сторонник плагинов, но рекомендую.
  • меню

    Простота в настройке блока произвольных полей при создании его таким способом теряется! Я ни в коем случае не хочу сказать, что создавать блоки таким способом лучше чем использовать плагины. Однако, такой подход более гибок, потому что мы можем создать абсолютно любые поля и расположить/стилизовать их как нам вздумается.

    К тому же, обычно нет нужды создавать по несколько таких блоков и часто их редактировать, как это можно делать используя плагины. К примеру, на этом блоге я использую такой подход и совсем небольшой код в functions.php избавляет меня от необходимости использовать очередной плагин.

    Это скорее обучающая статья и для многих плагины реализующие эту задачу будут лучшим решением.

    В этом уроке мы будем выводить произвольные поля или как их еще называют мета поля в WordPress. Будем выводить поля заданные плагином Advanced Custom Fields (ACF). В прошлом уроке мы научились создавать мета поля установив плагин Advanced Custom Fields. Это важно, потому что для вывода будем использовать функции которые заданы этим плагином. То есть если вы создали поля без установки этого плагина, то вам следует использовать другие функции. С пояснениями закончили, приступим.

    Читайте также  Расширение имени файла должно содержать

    Этот урок является частью цикла уроков, посвященных произвольным типам записей в WordPress. Обязательно посмотрите все уроки из данного цикла. Ссылки на них представлены ниже. Порядок имеет значение. Лучше начинать с первого урока этого цикла, чтобы все было понятно.

    Произвольные типы записей и поля:

    В плагине ACF есть замечательная документация. Рекомендую обращаться к ней при выводе мета полей в шаблоне WordPress. Знакомство начнем с двух функций.

    Часть первая. Теория

    Если чувствуете себя уверенно, можно сразу перейти ко второй части.

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

    Функция — get_field()

    Возвращает значение заданного поля.

    Это очень универсальная функция. Ее можно использовать чтобы получить значение, вывести значение (через echo), и взаимодействовать со значением. Обратите внимание, что тип возвращаемой переменной будет соответствовать типу поля (для текстового поля — это будет строка, для изображения — массив, в некоторых случаях — это может быть многомерный массив). Источник

    Параметры

    • $field_name: имя поля из которого будут получены данные, пример: “page_content” Обязательный параметр.
    • $post_id: ID записи в которой было задано данное значение. По умолчанию равно текущему посту в которой применяется данная функция. Необязательный параметр. Также это может быть ID опции, таксономии, пользователя, и т.п.
    • $format_value: форматировать или нет значение полученное из БД. По умолчанию — true. Необязательный параметр.

    Использование

    Функция — the_field()

    Отображает значение заданного поля. Эта функция аналогична выражению “echo get_field($field_name)”. Источник

    Параметры

    • $field_name:имя поля из которого будут получены данные, пример: “page_content” Обязательный параметр.
    • $post_id: ID записи в которой было задано данное значение. По умолчанию равно текущему посту в которой применяется данная функция. Необязательный параметр. Также это может быть ID опции, таксономии, пользователя, и т.п.

    Использование

    В принципе этих функций вполне достаточно, чтобы понять описанные выше готовые конструкции по отображения разных мета полей в шаблонах WordPress. Все примеры этих конструкций можно найти в документации к ACF, вот пример из документации как выводить в шаблоне поле с изображением.

    Часть вторая. Практическая

    Здесь я приведу готовые блоки кода, которые можно брать и использовать на своем сайте, заменив ID поля на свои значения.

    Текстовое поле, текстовый блок

    Изображение

    Базовый способ. Отображение картинки.

    Продвинутый способ. Разбор массива по переменным.

    Упрощенный способ, когда нужно получить только конкретный размер изображения, и конкретный дополнительные параметры:

    Простой способ. Вывод ссылки на файл.

    Расширенный способ. Вывод ссылки, заголовка, подписи и описания файла.

    Дебаг для поля с файлом

    Календарь

    Для вывода даты заданной через date picker, используем:

    Сортировка постов по дате заданной через поле выбора даты.

    Карта Google

    Для отображения карты Google с маркером предлагаю использовать следующий код. Есть два варианта.

    Первый способ, с официального сайта по документации по ACF

    Первая часть. Отвечает только за генерацию карты Google.

    Вторая часть. Выводит на карте единичный маркер.

    Другой вариант второй части, для вывода нескольких маркеров на карте.

    Второй способ, вариант с форума поддержки WordPress.

    В этом уроке были рассмотрены основные принципы и способы вывода в шаблоне базовых мета полей в WordPress заданных через плагин Advanced Custom Field. Как вывести не описанные здесь поля — можно найти в документации плагина.

    Этот урок является частью цикла уроков, посвященных произвольным типам записей в WordPress. Обязательно посмотрите все уроки из данного цикла.

    Произвольные типы записей и поля:

    Ссылка на основную публикацию
    Adblock
    detector