WD5 - разработка сайтов

Сравнение CMB2 vs ACF

Для wordpress существует достаточно много плагинов для добавления дополнительных полей (подборка плагинов конце статьи).

Чаще всего в популярных темах можно встретить 2 плагина, это CMB2 (Custom Metaboxes) и ACF (Advanced Custom Fields).

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

Основных подходов для добавления дополнительных полей в wp всего два:

  1. Собираем как конструктор внутри панели администратора.
  2. Делаем в виде файлов, прописывая весь код в functions.php или подключая его к теме.

Соответственно в первом случае данные хранятся достаточно часто в собственных таблицах или в стандартной таблице, но собственном формате. Во втором случае - данные хранятся обычно в стандартной таблице wp для мета полей.

Плагины типа CMB2, где все поля прописываются в коде предназначены больше для разработчиков, чем для конечных пользователей продукта (если конечно это не одно и тоже лицо). Но вполне допустимо дополнять один плагин другим, CMB2 + ACF допустимая связка.

CMB2 использует стандартную функцию wp для вывода данных в теме get_post_meta(), ACF использует собственный вариант get_field(). Отличия заметны когда плагин не установлен, а демо данные уже добавлены или отображение данных на сайте при случайном удалении / отключении плагина.

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

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

Преимущества базы данных  в ACF - это гибкость, быстрый импорт и экспорт между проектами не заходя на хостинг. Минусы: скорость работы ниже из-за большого количества запросов к MySQL, пользователь с правами на измение полей может изменить идентификатор поля или удалить случайно с потерей всех данных, разобраться что не так - сложно из-за отсутствия сведений об изменениях.

Платная версия ACF PRO - включает в себя дополнительные поля, которых нет в CMB, например галерея изображений. Но благодаря популярности CMB2, можно найти готовые примеры, реализующие данный функционал.

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

  ACF CMB2
Text + +
Textarea + +
Range + -
Checkbox + +
Radio Button + +
Select + +
True / False + -
Button Group + -
File + +
Gallery + +
Image + +
oEmbed + +
Wysiwyg Editor + +
Color Picker + +
Date Picker + +
Date Time Picker + +
Map + -
Time Picker + +
Accordion + -
Clone + -
Flexible Content + -
Group + +
Repeater + +/-
Tab + -
Link + +/-
Page Link + +/-
Post Object + +/-
Relationship + +/-
Taxonomy + +/-
Hidden - +
Code - +

За основу таблицы приняты дополнительные поля для ACF, там где  указано +/- для CMB2 означает, что однозначно сравнить не возможно, т.к. функционал не полностью идентичен и одно поле может заменять несколько других. Так же в учет не принимались возможности замены, например True/False реализуется с помощью CheckBox с одним флагом.

Другие плагины для работы с мета и дополнительными полями для wordpress

  • https://metabox.io/
  • http://customfieldsuite.com/
  • https://piklist.com/
  • https://toolset.com/
  • https://themeisle.com/plugins/easy-content-types/
  • https://carbonfields.net/
  • https://conductorplugin.com/
  • https://github.com/valendesigns/option-tree