Произвольные поля. Счётчик просмотров
Сейчас в WordPress вы можете спокойно задавать дополнительные параметры к различным сущностям сайта:
- записям, страницам и другим постам произвольного типа,
- рубрикам, меткам и другим таксономиям,
- пользователям,
- комментариям.
Эти дополнительные параметры и называются мета-поля, дополнительные поля, кастомные поля (custom fields), сейчас они чаще называются именно мета-поля.
«Произвольные поля» – это название метабокса для постов, где можно было как раз эти мета-поля устанавливать.
Что в видеоуроке?
В этом видеоуроке мы при помощи произвольных полей создадим счётчик просмотров для постов.
Мы рассмотрим такие моменты:
- Как сделать так, чтобы слово «просмотров» склонялось в зависимости от цифры – «1 просмотр», «2 просмотра», «5 просмотров».
- Как сделать так, чтобы счётчик просмотров прекрасно работал с установленными кэширующими плагинами на сайте, например WP-Super-Cache.
- Добавим в админку метабокс, в котором вы вручную сможете изменять значение количества просмотров для каждого поста индивидуально. Двумя способами – ручками и при помощи плагина Carbon Fields.
Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.
Как создать значения произвольных полей?
Итак, задавать значения произвольных полей в WordPress можно тремя способами:
- Стандартный способ через админку, метабокс «Произвольные поля».
- При помощи функций.
- При помощи метабоксов, которые мы либо написали сами, либо создали при помощи плагина, например Carbon Fields.
Используя метабокс «Произвольные поля»
Этот способ будет работать только для Записей, Страниц и других произвольных типов записей, у которых при регистрации в параметре supports указано значение custom-fields , например ‘supports’ => array( ‘custom-fields’ ) .

С приходом редактора Gutenberg этот метабокс с настройками полей считается устаревшим и мы обычно используем сайдбары Gutenberg для этих целей.
При помощи функций
Практически всегда мне было достаточно одной-единственной функции для этой цели – update__meta() , то есть для каждой сущности функция выглядит немного по-другому, но работает примерно одинаково.
- update_post_meta() – для постов,
- update_term_meta() – для таксономий,
- update_comment_meta() – для комментариев,
- update_user_meta() – для пользователей,
- update_site_meta() – для сайтов сети WordPress мультисайт.
Например мы хотим установить значение количества просмотров поста на 10000, тогда мы можем использовать этот код:
update_post_meta( 1, 'views', 10000 );
При помощи метабоксов
Метабоксы кстати могут быть сами разными, например на недавнем проекте у нас был такой метабокс:
Если вы хотите кодить эти метабоксы сами, то рекомендую это руководство, если при помощи плагина, то мне очень нравится Carbon Fields. В любом случае, в видеоуроке мы рассмотрели оба варианта.
Вывод произвольных полей на сайте
В основном вывод осуществляется при помощи одних и тех же функций, если только вы не используете для этого какой-то плагин для создания метабоксов, например Carbon Fields.
Вот эти функции:
- get_post_meta() – для постов,
- get_term_meta() – для таксономий,
- get_comment_meta() – для комментариев,
- get_user_meta() – для пользователей
- get_site_meta() – для сайтов сети WordPress мультисайт.
Принцип действия всех этих функций примерно одинаков, для того, чтобы его понять, вам нужно понять, что любое мета-поле состоит из трёх частей:
- ID сущности.
- Ключ meta_key .
- Значение meta_value .
Скриншот из базы данных WordPress:

И тогда в коде это будет выглядеть примерно так:
$value = get_post_meta( $post_id, $meta_key, true );
Или для нашего примера:
$value = get_post_meta( 1, 'views', true );
Купить курс
- 21 видеоурок
- Можно скачать готовый код после каждого урока
- Можно начать проходить курс сразу же после оплаты
- Достаточно базовых знаний HTML и CSS, чтобы пройти курс
- Единоразовый платёж
- Доступ навсегда
- Уроки актуальны в 2023-м году
Как вывести стандартные произвольные поля в WordPress
Очень часто необходимо добавить к записи, странице произвольные данные и вывести в шаблоне.
В этом нам поможет стандартный функционал в WordPress «Произвольные поля», можно конечно воспользоваться и дополнительными плагинами, но дабы не перегружать систему, для текстовых данных к примеру или вывода ссылки, путь к изображению хватит и стандартного функционала, тем более делается это очень просто.
В консоли заходим в необходимую запись, внизу есть «Произвольные поля», нажимаем возле имени «Введите новое» и вписываем имя поля, а в правой ячейке с названием «Значение» вписываем данные которые необходимо отобразить.


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

В шаблоне записи (single.php) или в шаблоне страницы (page.php), которые находятся в папке с шаблоном по адресу:
корень_сайта/wp-content/themes/название_выбранного_шаблона/
вставляем в необходимых местах код:
ID, 'alfa', true); ?>
Где вместо pole вставляем имя поля и в итоге выведется введенное значение.
Так же можно вывести и в content-single.php, который находится в
корень_сайта/wp-content/themes/название_выбранного_шаблона/template-parts/
Или в любом кастомном шаблоне,
Так же можно вывести в рубрике(категории), где выводятся подряд все записи, то есть у каждой записи будут свои значения отображаться.
К тому же Вам не надо создавать у каждой записи, страницы одни и теже поля для вывода, достаточно выбрать в выпадающем списке ранее созданные поля(у других записей/страниц) и только прописать новое значение. Достаточно удобно.

Если у Вас что-либо не получается — можете задать вопрос в комментариях.
Обзор плагина для создания произвольных полей на wordpress подробная инструкция и обзор дополнительных инструментов
Чтобы легко выводить элементы в нужных местах используйте плагин произвольные поля wordpress. Проще говоря произвольное поле выводит где нужно текст, скрипт, картинку, которую задали в нем, не прибегая к ковырянию кода и не создавая разные шаблоны для каждой страницы. Метод применяется в интернет магазинах, например под управлением woocommerce.
Разбор плагина Advanced Custom Fields
Про Advanced Custom Fields написано много статей, но все поверхностны и не дают точную инструкцию. Разберем добавление текстового поля под статьями определённой рубрики. Устанавливаем плагин стандартным методом через поиск, либо скачиваем отсюда . Установив появиться новый раздел в меню «Группы полей», заходим и настраиваем.

- Путь к дополнительным полям
- Вводим название, отображаться на сайте не будет
- Условия отображения, важный пункт, разъясню подробнее. В условии необходимо выставить произвольное поле только в тех записях которые расположены в определённой рубрике (в нашем случае «рубрика 1»). Задаем правило в таком порядке как на скриншоте, то есть выделяем все категории в первом поле, выставляем «равно» или «не равно» (если второе, то правило работает от противного), и далее более точно выставляем элемент. В зависимости что будет выбрано в первом выпадающем списке, параметры последнего будут меняться.
- Добавить ещё условие при необходимости
- После настройки отображения, переходим к созданию самого поля, нажимаем синюю кнопку
Появиться раздел с добавлением произвольного поля, путём нажатия кнопки в группу можно определять бесконечное количество элементов, подчиняющихся одному условию отображения. (на странице записи покажем подробнее)

- Ярлык, значение выводиться на странице редактирования
- Имя, главный параметр, именно по нему привяжемся и выведем поле в необходимом месте
- Тип, как написано ранее текст
- Подсказка, выводиться так же на странице редактирования
- Обязательно, делает запрос нужно ли заполнять или можно оставить пустым
- Текст заполнителя
- Условная логика, добавляет дополнительные параметры, то есть вывод можно настроить ещё тоньше
- Атрибуты, по логике регулируют отображение на сайте, но проделав эксперимент, пришёл к выводу что работает не на всех темах
Часть параметров обозревать не стал, они понятны без объяснений.
Далее сделаем глобальные настройки. Спуститесь пониже и увидите короткий раздел, тут в основном параметры, где располагать поля в панели, поэкспериментируйте. Единственный важный пункт «Активация», естественно включаем.

Полюбуемся на работу я перехожу в одну из записей которая расположена в «рубрика 1» и вижу в wordpress произвольное поле. Видим весь текст, который писали в группах, но заполнив информацию на сайте ничего не увидим.

Для отображения информации на сайте нужно прописать функцию в шаблон. Помните заполняли раздел «Имя», в нашем случае «test-stati-imya-pola». Хочу вывести в записях темы под комментариями, по логике иду в файл single.php, использую filezilla. Вставить нужно такой код:
Если хотим изменять внешний вид через CSS, то обёртываем в div с классом.
Сохраняем и загружаем обратно на сервер в тему, и любуемся выводом надписи. Более подробно читайте официальную памятку на сайте ACF .

Выбирал плагин ACF, потому что простой в применении и интуитивно понятный, разобраться просто, не пришлось идти на youtube и смотреть уроки, но если любите видео прикладываю инструкцию.
Остальные плагины wordpress для создания произвольных полей
В этом разделе описывать работу всех плагинов не будем, лишь расскажу на что обратить внимание и в чём уступают. Их не много всего 3 штуки, искал бесплатные варианты на wordpress.org, тем самым обеспечивая безопасность.
- Custom Post Types and WCK , большой комбайн, направленный на изменение таксономий в wordpress. В одной из функций есть дополнительные поля, но если остальные не нужны, то не рекомендую к применению, чтобы не увеличить нагрузку на блог.
Все плагины постоянно обновляются, протестированы и показаны в этой статье. Мы разобрали основной плагин произвольных полей wordpress и дали несколько рекомендаций и аналогов, пользуйтесь и делайте работу с вордппресс ещё легче.
Читайте также: плагин блоков внимания WPRemark с более чем 200 предустановленными иконками.
Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.
Блок произвольных полей в админке WordPress своими руками
Чтобы не создавать произвольные поля полностью в ручную, можно использовать мой PHP класс для удобно создания метаполей записи.
Чтобы вывести подобный блок для элементов таксономий, смотрите описание события: (taxonomy)_edit_form_fields. Также смотрите ответ на вопрос: Метаполя для рубрик (таксономий) в WordPress
В в одная часть
Прежде чем начать рассказывать о том как создать произвольный блок данных в админ-панели на странице редактирования постов, который будет управлять указанными произвольными полями, следует отметить, что WordPress — платформа которая, пожалуй, как никакая другая поддается расширению с наименьшими усилиями. В частности, именно поэтому под WordPress написано так много плагинов — все очень просто, нужно лишь знать азы PHP и понимать принцип работы системы.
Каждый, кто достаточно близко знаком с WordPress неоднократно встречался с понятием «произвольные поля» и с их помощью решал некоторые нетривиальные задачи.
Произвольные поля в WordPress — очень удобный инструмент, когда нужно «прикрепить» к конкретному посту какие-либо дополнительные данные. Такими данными может быть что угодно, начиная от логических true/false (1/0), заканчивая объемными текстами, массивами и прочим. К примеру, мы можем создать новое произвольное поле Title и в его значение написать текст (альтернативный заголовок поста), затем в коде шаблона использовать следующий код, чтобы вывести этот текст:
ID, 'title', true); ?>
Следует отметить, что функцию get_post_meta() можно использовать за пределами Цикла WordPress, т.е. где угодно в шаблоне. В данном примере мы используем её в части документа, чтобы дать html странице заголовок отличный от заголовка самой статьи (иногда полезно для SEO).

Другой пример: используя произвольные поля мы можем выполнять или не выполнять действия, в зависимости от того, какие данные у нас находится в значении произвольного поля. Например, размещая в произвольное поле логические цифры 1 или 0 мы можем выводить или не выводить какую-либо информацию для текущего поста.
Произвольные поля используются в 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. Создадим новый мета блок для постов
Назовем его «Дополнительные поля»:
// подключаем функцию активации мета блока (my_extra_fields) add_action(‘add_meta_boxes’, ‘my_extra_fields’, 1); function my_extra_fields()
#2. Заполним этот блок полями html формы
Делается это через, указанную в add_meta_box() функцию extra_fields_box_func() . Именно она отвечает за содержание мета блока:
Описание статьи (description):
Видимость поста: ID, ‘robotmeta’, 1); ?>
? выбор за вами
» />
Все названия полей я оформил в массив extra[] , чтобы потом проще было обработать эти данные.
Спрятанное поле name=»extra_fields_nonce» , нужно для проверки при сохранении данных.
#3. Сохраняем данные
На этом этапе, мы уже создали блок произвольных полей, теперь нужно обработать данные полей при сохранении поста. Обработать, значит записать их в в базу данных или удалить от туда. Для этого используем хук save_post, который срабатывает в момент сохранения поста. В этот момент мы получим данные из массива extra[] и обработаем них:
// включаем обновление полей при сохранении add_action( 'save_post', 'my_extra_fields_update', 0 ); ## Сохраняем данные, при сохранении поста function my_extra_fields_update( $post_id ) < // базовая проверка if ( empty( $_POST['extra'] ) || ! wp_verify_nonce( $_POST['extra_fields_nonce'], __FILE__ ) || wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) return false; // Все ОК! Теперь, нужно сохранить/удалить данные $_POST['extra'] = array_map( 'sanitize_text_field', $_POST['extra'] ); // чистим все данные от пробелов по краям foreach( $_POST['extra'] as $key =>$value ) < if( empty($value) )< delete_post_meta( $post_id, $key ); // удаляем поле если значение пустое continue; >update_post_meta( $post_id, $key, $value ); // add_post_meta() работает автоматически > return $post_id; >
Вот и все, блок произвольных полей готов!
Теперь, изменяя html код, мы можем редактировать содержимое мета блока. Но не забываем, что названия полей имеют вид массива со значением ключа произвольно поля: name=»extra[meta_key]» .
Блок произвольных полей для произвольного типа записей
Если нужно создать блок для другого типа записей, допустим page (для страниц), то регистрируем еще один мета блок и описываем его html код в новой функции, которую так же нужно указать при регистрации блока ( extra_fields_box_page_func ). Функцию обработки полей при сохранении поста создавать уже не надо, главное указать названия полей в виде массивов extra[] :
function my_extra_fields() < add_meta_box( 'extra_fields', 'Дополнительные поля', 'extra_fields_box_func', 'post', 'normal', 'high' ); add_meta_box( 'extra_fields', 'Дополнительные поля', 'extra_fields_box_page_func', 'page', 'normal', 'high' ); >## html код блока для типа записей page function extra_fields_box_page_func() < ?>
Сложности с типом checkbox
Недостатком такого метода является то, что массив extra[] , обязательно должен быть определен, пусть даже он передает пустое значение иначе поле не будет обработано при сохранении данных. В связи с этим, возникает проблема при использовании типа checkbox :
Чтобы обойти этот «недуг» я сделал так: перед полем чекбокса создаем hidden поле с name как у чекбокса и пустым значением. И получается, если галочка стоит, то значение hidden поля перебивается, если галки нет, то берется пустое значение hidden поля.
Т.е. checkbox нужно вызывать так:
Такой же трюк иногда может пригодится и для поля с типом radio.
Пример реального кода с типами checkbox:
// код блока function extra_fields_box_func( $post ) < ?>Описание статьи (description):
Видимость поста: ID, 'robotmeta', 1); ?>
ID, 'select', 1); ?> ? выбор за вами
" /> // включаем обновление полей при сохранении add_action('save_post', 'my_extra_fields_update', 0); /* Сохраняем данные, при сохранении поста */ function my_extra_fields_update( $post_id ) < // базовая проверка if ( empty( $_POST['extra'] ) || ! wp_verify_nonce( $_POST['extra_fields_nonce'], __FILE__ ) || wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) return false; // Все ОК! Теперь, нужно сохранить/удалить данные $_POST['extra'] = array_map( 'sanitize_text_field', $_POST['extra'] ); foreach( $_POST['extra'] as $key =>$value ) < if( empty($value) )< delete_post_meta( $post_id, $key ); // удаляем поле если значение пустое continue; >update_post_meta( $post_id, $key, $value ); // add_post_meta() работает автоматически > return $post_id; >
Еще один пример создания метабокса (ООП)
Этот пример показывает как создать одно поле, в котором будет храниться массив данных. Массив можно расширять или уменьшать через нажатие на + или удалить (работает на скрипте).
Это пример создание поля «повторитель», как у плагина ACF (поле repeater в платной версии).
В результате получим такой метабокс:

post_type, array( $this, 'save_metabox' ) ); add_action( 'admin_print_footer_scripts', array( $this, 'show_assets' ), 10, 999 ); > ## Добавляет матабоксы public function add_metabox() < add_meta_box( 'box_info_company', 'Информация о компании', array( $this, 'render_metabox' ), $this->post_type, 'advanced', 'high' ); > ## Отображает метабокс на странице редактирования поста public function render_metabox( $post ) < ?>
| Адреса компании | '; $addresses = get_post_meta( $post->ID, self::$meta_key, true ); if ( is_array( $addresses ) ) < foreach ( $addresses as $addr ) < printf( $input, esc_attr( $addr ) ); >> else < printf( $input, '' ); >?> |
|---|
Плагины для создания блоков произвольных полей
В статье я говорил о плагинах, которые создают мета блоки заменяющие произвольные поля, но ни разу не упомянул ни один. Исправляюсь:
- Advanced Custom Fields (ACF) — пожалуй, самый популярный и гибкий плагин для создания произвольных полей. С хорошей документацией.
- Custom Field Suite — похож на ACF, только менее навороченный.
- Carbon Fields — похож на ACF только без визуальной настройки, все делается в коде. Хорошо подойдет для разработчиков. Бесплатный.
- CMB2 — CMB2 инструмент для разработчиков для создания: метабоксов, метаполей. Позволяет легко управлять записями, элементами таксономий, пользователями, комментариями или создавать произвольные страницы настроек.
- Custom Field Template — настоящий комбайн. С ним можно создать любую форму, для любых типов постов, указать формы для отдельных постов и рубрик. Думаю в большинстве случаев, можно обойтись без такого комбайна.
- kc-settings — ураган а не плагин, хоть и не сторонник плагинов, но рекомендую.
Заключение
Простота в настройке блока произвольных полей при создании его таким способом теряется! Я ни в коем случае не хочу сказать, что создавать блоки таким способом лучше чем использовать плагины. Однако, такой подход более гибок, потому что мы можем создать абсолютно любые поля и расположить/стилизовать их как нам вздумается.
К тому же, обычно нет нужды создавать по несколько таких блоков и часто их редактировать, как это можно делать используя плагины. К примеру, на этом блоге я использую такой подход и совсем небольшой код в functions.php избавляет меня от необходимости использовать очередной плагин.
Это скорее обучающая статья и для многих плагины реализующие эту задачу будут лучшим решением.
До этого из: Код (коддинг)
- Функция вывода всех постов по месяцам написания
- Исполняемый php код в записях WordPress
- Подсветка результатов поиска, без использования плагинов
Последнее из: Расширение возможностей WordPress
- WP_Query: как сравнить мета-поля между собой в meta_query запросе
- Добавление права пользователю налету
- Регистрация таксономии без привязки к типу записи
