WordPress как на ладони
Готовые темы (шаблоны) для WordPress wordpress jino

Carbon Fields — обзор плагина и начало работы

Carbon Fields - это библиотека (плагин) для удобного создания произвольных полей в административной части WordPress, а также вывода сохранённых данных во фронт-энде. Она позволяет разработчикам быстро добавлять новые поля для записей, таксономий, меню и так далее. Но всё это создаётся с помощью кода, потому данный плагин больше подходит для разработчиков.

Carbon Fields - плагин для создания произвольных полей в WordPress

При создании Carbon Fields были учтены недостатки и достоинства таких популярных плагинов, как Advanced Custom Fields и CMB2, а синтаксис создания полей позаимствован у Django Models.

Чтобы понимать по какому принципу работает Carbon Fields и вообще о чем идёт речь, читайте заметку о произвольных полях в WordPress. Эта библиотека (плагин) делает тоже самое, только в разы удобнее, плюс куча дополнительных возможностей.

Carbon Fields использует пространства имен PHP, а значит требует PHP 5.3+.

Carbon Fields можно скачать:

Принцип работы

Плагин рассчитан в первую очередь на разработчиков и не имеет визуального интерфейса. Все создается и работает через создание объектов и указания им параметров. Но не смотря на это, логика продумана и довольна удобна.

Основными компонентами библиотеки являются:

1. Container (контейнер) – группа полей

Создаем контейнер, то есть место, куда будут складываться поля. Создание контейнера в первую очередь определяет, где и как будут отображаться произвольные поля. Например, при создании контейнера указываем его тип - Post Meta. Теперь он будет отображаться только на странице редактирования Записи, если Term Meta - таксономии (рубрики, теги и т.п.). Carbon Fields имеет в своём составе контейнеры для всех возможных типов контента WordPress.

2. Field (поле) – одиночное поле

Создаем поля в выбранном контейнере. Каждое поле имеет свой внешний вид и предназначение. Carbon Fields предоставляет широкий выбор видов полей, покрывающих большинство задач при web-разработке. Это простые текстовые поля и области текста, поля для загрузки файлов или изображений, поля для выбора цвета или сайдбара и так далее - более 20 типов полей! Ко всему прочему, вы в праве создать своё уникальное поле!

3. Data Storage (хранилище) – базовое хранилище данных для значений полей

Вывод сохраненных данных в шаблоне темы или оперирование этими данными для реализации логики web-приложения.

Все данные хранятся как нативные данные WordPress: если это записи, то в таблице *_postmeta, комменты - *_commentmeta, термы - *_termmeta, пользователи - *_usermeta, ну и опции в таблице опций.

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

к началу

Пример

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

Страница настроек темы

Пример настроек темы

<?php
use Carbon_Fields\Container;
use Carbon_Fields\Field;

Container::make( 'theme_options', 'Пульт' )
		 ->add_tab( 'Наша команда', array(
			 Field::make( 'complex', 'crb_places', 'Список' )
				  ->add_fields( array(
					  Field::make( 'image', 'photo', 'Фото' )->set_value_type( 'url' )->set_width( 33 ),
					  Field::make( 'text', 'job', 'Должность' )->set_width( 33 ),
					  Field::make( 'text', 'fio', 'Фамилия, имя и отчество' )->set_width( 33 )
				  ) )
		 ) )
		 ->add_tab( 'Контакты', array(
			 Field::make( 'text', 'url_fb', 'Фейсбук' ),
			 Field::make( 'text', 'url_vk', 'вКонтакте' ),
			 Field::make( 'text', 'url_tw', 'Твиттер' ),
			 Field::make( "map", "crb_company_location", "Местоположение" )
				  ->help_text( 'Перетащите указатель на карту, чтобы выбрать местоположение' ),
		 ) )
		 ->add_tab( 'СЕО', array(
			 Field::make( 'text', 'title-lp', 'Title лендинга' ),
			 Field::make( 'text', 'description-lp', 'Description лендинга' ),
			 Field::make( "header_scripts", "header_google_analytics", 'Код счётчика Гугл.Аналитикс' ),
			 Field::make( "header_scripts", "header_script_yandex_metrika", 'Код счётчика Яндекс.Метрики' ),
		 ) );

Минимум кода - максимум возможностей! И пример отражает лишь их малую часть. Но даже тут уже видно как можно быстро создать блоки для комфортного управления сайтом. Подобные контейнеры можно создавать для различных типов записей, таксономий, меню, юзеров, опций и так далее - обо всех них поговорим в отдельной статье о контейнерах в Carbon Fields.

к началу

Установка и подключение Carbon Fields

Как упоминалось выше установить библиотеку можно несколькими способами, рассмотрим каждый из них.

Как Плагин

Плагин устанавливается из репозитория как обычно. Этот способ позволяет следить за обновлением библиотеки.

Но если отключить плагин, то все функции Carbon Fields, которые использовались в теме/плагине перестанут работать, поэтому, если устанавливается плагин, то в теме рекомендуется прописать «страховку» для функций библиотеки. Этот код сохранит работоспособность темы, если плагин отключить.

if ( ! function_exists( 'carbon_get_post_meta' ) ) {
	function carbon_get_post_meta( $id, $name, $type = null ) {
		return false;
	}   
}

if ( ! function_exists( 'carbon_get_the_post_meta' ) ) {
	function carbon_get_the_post_meta( $name, $type = null ) {
		return false;
	}   
}

if ( ! function_exists( 'carbon_get_theme_option' ) ) {
	function carbon_get_theme_option( $name, $type = null ) {
		return false;
	}   
}

if ( ! function_exists( 'carbon_get_term_meta' ) ) {
	function carbon_get_term_meta( $id, $name, $type = null ) {
		return false;
	}   
}

if ( ! function_exists( 'carbon_get_user_meta' ) ) {
	function carbon_get_user_meta( $id, $name, $type = null ) {
		return false;
	}   
}

if ( ! function_exists( 'carbon_get_comment_meta' ) ) {
	function carbon_get_comment_meta( $id, $name, $type = null ) {
		return false;
	}   
}
к началу

Как Библиотека

Скачайте библиотеку с github, поместите её в тему/плагин, к примеру (для темы) по такому пути my-theme/inc/carbon-fields и подключите в functions.php:

require_once __DIR__ . '/inc/carbon-fields/carbon-fields-plugin.php';

Этот способ лишает вас обновлений, но гарантирует неизменную работоспособность кода.

Пользовательские файлы

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

require_once get_template_directory() . '/inc/custom-fields/post-meta.php';

Но разработчики Carbon Fields рекомендуют использовать хук carbon_register_fields. Например, код ниже можно разместить в теме (functions.php) или в коде плагина:

add_action( 'carbon_register_fields', 'crb_register_custom_fields' );
function crb_register_custom_fields() {
	// путь к пользовательскому файлу определения поля (полей), измените под себя
	require_once __DIR__ . '/inc/custom-fields/post-meta.php';
}

В примере, post-meta.php - это файл (имя произвольное), где вы можете создать свои собственные контейнеры с предпочтительными полями. Файлов может быть несколько, ограничений нет.

Любой пользовательский php файл с определением полей должен начинаться с конструкции

use Carbon_Fields\Container;
use Carbon_Fields\Field;

И только после неё описывать (создавать) произвольные поля.

campusboy 1455wp-plus.ru
WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Carbon Fields - обзор плагина и начало работы 21 комментарий
  • Dimox cайт: dimox.name
    @

    Просто супер-плагин! Уже хочу скорее начать его использовать вместо ACF.

    Поскольку разрабатываю темы для ВП, мне будет удобнее подключать его прямо в теме, в виде библиотеки. Но весит она довольно немало - 700+ килобайт. Отсюда вопрос - можно ли удалить из библиотеки что-то необязательное, что не повлияет на работоспособность?

    Пока предполагаю следующее:

    • все, кроме php-файлов, из корня;
    • папка /tests/;
    • все файлы, кроме для русского языка, из папки /languages/.
    Ответить8 дней назад #
    1
    • campusboy1455 cайт: wp-plus.ru

      Спасибо за коммент! Да, плагин меня порадовал и по сути вполне может заменить ACF. Довольно легко расширяется, если есть знания PHP и ООП в частности. Там самая главная папка - core и весит она ~220Кб. Остальное место занимают CSS, JS, тесты, переводы и подобная требуха. А в чем причина такого маниакального желания что-то удалить? smile Думаю, папку test смело можно удалить, а так же в папке languages оставить только нужные языки, в корне оставить только два php файла. В общем, как ты и сказал. Все css в папке assets не сжаты. В общем, можно сократить объем, но, повторюсь, какой в этом смысл? ACF, кстати, весит ~5Mb.

      Ответить8 дней назад #
      • Dimox cайт: dimox.name
        @

        Спасибо за ответ smile

        А в чем причина такого маниакального желания что-то удалить?

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

        Ответить7 дней назад #
        1
    • campusboy1455 cайт: wp-plus.ru

      Изучаю код и не вижу, чтобы данные очищались. Сразу летят в базу через нативные функции WP. Не просматривал этот момент?

      Ответить5 дней назад #
  • garri834 cайт: clubwp.ru

    Понравился плагин, тоже думаю заменить им ACF. А вот вопрос подскажите, как сделать поиск или фильтрацию по этим полям? Или может плагин есть какой хороший?

    Ответить7 дней назад #
    • campusboy1455 cайт: wp-plus.ru

      Я не смог понять твой вопрос. Перефразируешь?

      Ответить7 дней назад #
      • garri834 cайт: clubwp.ru

        Можно как-то сделать поиск по этим доп. полям или фильтр по ним. Я имею ввиду поля прикрученные например к статье. Что бы пользователи в фронд-энде могли использовать так назвать расширенный поиск по сайту.

        Что-то типа похожего на это

        Ответить7 дней назад #
        • campusboy1455 cайт: wp-plus.ru

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

          То, что ты показал, за нас Carbon Fields не сделает. И вообще, на будущее, не стоит делать что-то для сортировок, основанное на произвольных полях - они будут работать медленно (сортировки). Такое лучше делать на таксономиях, скорее всего руками программировать подобные формы. Хотя, может и плагин есть. У меня друг все подобные сортировки делает с помощью Woocommerce. Казалось бы, плагин для магазина, но это не так, ведь товар - это произвольный тип записи, а значит с ним можно работать обычно. Ну и к Woocommerce очень много плагинов для сортировок и всё такое, чем он и пользуется, не прибегая к программированию (лишь в редких случаях).

          Ответить7 дней назад #
          • garri834 cайт: clubwp.ru

            Спасибо за ответ. Надо подумать ещё 8) просто таксономия возможно не всегда уместна. Думал можно чекбоксы или радиокнопки использовать в доп полях.

            Я как раз и хочу уйти от Woocommerce за счет Carbon Fields, надо сделать каталог и как раз то что именно мне и надо. У WC когда набирается большое к-во товаров начинает тормозить.

            Надо ещё раз продумать как-то лучше реализовать всё.

            Ответить7 дней назад #
            • campusboy1455 cайт: wp-plus.ru

              Если каталог большой, то произвольные поля точно не вариант smile А вот почему WC тормозит на большом количестве - не могу ответить. Ведь это простые посты. А если сделать такое же количество записей - тормозит? По идее, это одно и то же.

              Ответить7 дней назад #
              • garri834 cайт: clubwp.ru

                Вот такой тест не проводил. А почему произвольные поля не вариант? Для чего они тогда вообще нужны? smile

                Ответить7 дней назад #
                • campusboy1455 cайт: wp-plus.ru

                  Они нужны, чтобы делать мелкие выборки, но главная цель - хранить доп. контент, который потом в шаблоне выводить. Потому что множественная выборка по произвольным полям сама по себе медленная, об этом рассказывал ещё в своем докладе Константин Ковшенин о 7 убийцах производительности WordPress (с 13 минуты).

                  Ответить7 дней назад #
                  1
  • Anton Vakulenko cайт: wordpress.org/plugins/carbon-fields

    Здравствуйте.

    Я один из авторов "Carbon Fields".

    Огромное спасибо за проделанную работу и качественную статью.

    Мы очень рады, что наш плагиин Вас порадовал!

    Ответить7 дней назад #
    2
    • campusboy1455 cайт: wp-plus.ru

      Приветствую! Неожиданно и приятно. Хотел написать вам чуть попозже, когда доделал бы видеоуроки с просьбой включить в описание к плагину ссылки на наши материалы. Это возможно?

      Во всяком случае, спасибо за продукт! Как видите, он оказался многим по душе (тут комменты + в чатах когда делал анонс). Жаль, что о Карбоне мало кто знает. Даже за рубежом о нем почти ничего нет (ни статей, ни видео), хорошо хоть документация на оф. сайте годная, так бы было вообще тяжко. Будем популяризировать smile Может быть Вы ещё что-то порекомендуете добавить в наши материалы?

      Ответить7 дней назад #
      1
  • Евгений cайт: karskiy.com

    Друзья, и тем не менее, а какие проблемы с ACF? Чем он вам не угодил smile

    Ответить7 дней назад #
    • campusboy1455 cайт: wp-plus.ru

      А кто сказал, что не угодил? smile Отличный плагин. Просто была цель найти бесплатный аналог, ведь не у всех есть средства приобрести его PRO версию, в которой есть repeat поля (я вот ими часто пользуюсь).

      Ответить7 дней назад #
      1
    • garri834 cайт: clubwp.ru

      Пользовался ACF только из-за повторяющихся полей. Посмотрел оба этих плагина через плагин P3 в среднем ACF грузится в 3 раза дольше чем Carbon Fields. И самый большой плюс он бесплатный.

      Ответить6 дней назад #
      2

Здравствуйте, !

Ваш комментарий