Перейти к содержимому

Как включить произвольные поля в wordpress

  • автор:

Произвольные поля. Счётчик просмотров

Сейчас в WordPress вы можете спокойно задавать дополнительные параметры к различным сущностям сайта:

  • записям, страницам и другим постам произвольного типа,
  • рубрикам, меткам и другим таксономиям,
  • пользователям,
  • комментариям.

Эти дополнительные параметры и называются мета-поля, дополнительные поля, кастомные поля (custom fields), сейчас они чаще называются именно мета-поля.

«Произвольные поля» – это название метабокса для постов, где можно было как раз эти мета-поля устанавливать.

Что в видеоуроке?

В этом видеоуроке мы при помощи произвольных полей создадим счётчик просмотров для постов.

Мы рассмотрим такие моменты:

  • Как сделать так, чтобы слово «просмотров» склонялось в зависимости от цифры – «1 просмотр», «2 просмотра», «5 просмотров».
  • Как сделать так, чтобы счётчик просмотров прекрасно работал с установленными кэширующими плагинами на сайте, например WP-Super-Cache.
  • Добавим в админку метабокс, в котором вы вручную сможете изменять значение количества просмотров для каждого поста индивидуально. Двумя способами – ручками и при помощи плагина Carbon Fields.

Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.

Как создать значения произвольных полей?

Итак, задавать значения произвольных полей в WordPress можно тремя способами:

  1. Стандартный способ через админку, метабокс «Произвольные поля».
  2. При помощи функций.
  3. При помощи метабоксов, которые мы либо написали сами, либо создали при помощи плагина, например Carbon Fields.

Используя метабокс «Произвольные поля»

Этот способ будет работать только для Записей, Страниц и других произвольных типов записей, у которых при регистрации в параметре supports указано значение custom-fields , например ‘supports’ => array( ‘custom-fields’ ) .

метабокс с произвольными полями в WordPress

С приходом редактора 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 мультисайт.

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

  1. ID сущности.
  2. Ключ meta_key .
  3. Значение meta_value .

Скриншот из базы данных WordPress:

мета-поля в базе данных WordPress

И тогда в коде это будет выглядеть примерно так:

$value = get_post_meta( $post_id, $meta_key, true );

Или для нашего примера:

$value = get_post_meta( 1, 'views', true );

Купить курс

  • 21 видеоурок
  • Можно скачать готовый код после каждого урока
  • Можно начать проходить курс сразу же после оплаты
  • Достаточно базовых знаний HTML и CSS, чтобы пройти курс
  • Единоразовый платёж
  • Доступ навсегда
  • Уроки актуальны в 2023-м году

Как вывести стандартные произвольные поля в WordPress

Очень часто необходимо добавить к записи, странице произвольные данные и вывести в шаблоне.
В этом нам поможет стандартный функционал в 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 написано много статей, но все поверхностны и не дают точную инструкцию. Разберем добавление текстового поля под статьями определённой рубрики. Устанавливаем плагин стандартным методом через поиск, либо скачиваем отсюда . Установив появиться новый раздел в меню «Группы полей», заходим и настраиваем.

Обзор плагина для создания произвольных полей на wordpress подробная инструкция и обзор дополнительных инструментов

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

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

Обзор плагина для создания произвольных полей на wordpress подробная инструкция и обзор дополнительных инструментов

  • Ярлык, значение выводиться на странице редактирования
  • Имя, главный параметр, именно по нему привяжемся и выведем поле в необходимом месте
  • Тип, как написано ранее текст
  • Подсказка, выводиться так же на странице редактирования
  • Обязательно, делает запрос нужно ли заполнять или можно оставить пустым
  • Текст заполнителя
  • Условная логика, добавляет дополнительные параметры, то есть вывод можно настроить ещё тоньше
  • Атрибуты, по логике регулируют отображение на сайте, но проделав эксперимент, пришёл к выводу что работает не на всех темах

Часть параметров обозревать не стал, они понятны без объяснений.

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

Обзор плагина для создания произвольных полей на wordpress подробная инструкция и обзор дополнительных инструментов

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

Обзор плагина для создания произвольных полей на wordpress подробная инструкция и обзор дополнительных инструментов

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

Если хотим изменять внешний вид через CSS, то обёртываем в div с классом.

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

Обзор плагина для создания произвольных полей на wordpress подробная инструкция и обзор дополнительных инструментов

Выбирал плагин 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).

Блок произвольных полей в WordPress

Другой пример: используя произвольные поля мы можем выполнять или не выполнять действия, в зависимости от того, какие данные у нас находится в значении произвольного поля. Например, размещая в произвольное поле логические цифры 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, то читать все что ниже — пустая трата времени.

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

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

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

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

Что мы видим? — Ненужные для посторонних глаз ключи произвольных полей (о них я говорил выше), которые к тому же нужно еще и выбирать из выпадающего списка (а их там может быть совсем не 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); ?>

? выбор за вами

" /> // включаем обновление полей при сохранении 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, '' ); >?>
## Очищает и сохраняет значения полей public function save_metabox( $post_id ) < // Check if it's not an autosave. if ( wp_is_post_autosave( $post_id ) ) return; if ( isset( $_POST[self::$meta_key] ) && is_array( $_POST[self::$meta_key] ) ) < $addresses = $_POST[self::$meta_key]; $addresses = array_map( 'sanitize_text_field', $addresses ); // очистка $addresses = array_filter( $addresses ); // уберем пустые адреса if ( $addresses ) update_post_meta( $post_id, self::$meta_key, $addresses ); else delete_post_meta( $post_id, self::$meta_key ); >> ## Подключает скрипты и стили public function show_assets() < if ( is_admin() && get_current_screen()->id == $this->post_type ) < $this->show_styles(); $this->show_scripts(); > > ## Выводит на экран стили public function show_styles() < ?> .add-company-address < color: #00a0d2; cursor: pointer; >.company-address-list .item-address < display: flex; align-items: center; >.company-address-list .item-address input < width: 100%; max-width: 400px; >.remove-company-address ## Выводит на экран JS public function show_scripts() < ?> >

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

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

  • 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 запросе
  • Добавление права пользователю налету
  • Регистрация таксономии без привязки к типу записи

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

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

https://kapelnicza.vyvod-iz-zapoya-v-stacionare-samara12.ru/