CMB2

Description

CMB2 is a developer’s toolkit for building metaboxes, custom fields, and forms for WordPress that will blow your mind. Easily manage meta for posts, terms, users, comments, or create custom option pages.

CMB2 is a complete rewrite of Custom Metaboxes and Fields for WordPress. To get started, please follow the examples in the included example-functions.php file and have a look at the basic usage instructions.

You can see a list of available field types here.

Contribution

Development occurs on Github, and all contributions welcome. Please read the CONTRIBUTING doc for more details.

A complete list of all our awesome contributors found here: github.com/CMB2/CMB2/graphs/contributors

Features:

Translation

If you are looking to provide language translation files, Please do so via WordPress Plugin Translations.

Documentation

  • CMB2 documentation can be found at the CMB2 wiki on github. Also, If you’re into reading code and inline documentation, we tried to keep all functions and methods fully inline-documented.

3rd Party Resources

Custom Field Types

Other Helpful Resources

Links

View CHANGELOG

Known Issues

  • Metabox containing WYSIWYG editor cannot be moved or used in a repeatable way at this time (this is a TinyMCE issue).
  • Not all fields work well in a repeatable group.

Installation

If installing the plugin from wordpress.org:

  1. Upload the entire /CMB2 directory to the /wp-content/plugins/ directory.
  2. Activate CMB2 through the ‘Plugins’ menu in WordPress.
  3. Copy (and rename if desired) example-functions.php into to your theme or plugin’s directory.
  4. Edit to only include the fields you need and rename the functions.
  5. Profit.

If including the library in your plugin or theme:

  1. Place the CMB directory inside of your theme or plugin.
  2. Copy (and rename if desired) example-functions.php into a folder above the CMB directory OR copy the entirety of its contents to your theme’s functions.php file.
  3. Edit to only include the fields you need and rename the functions (CMB directory should be left unedited in order to easily update the library).
  4. Profit.

FAQ

FAQ’s usually end up in the github wiki.

Reviews

3 de abril de 2024 1 reply
I love CMB2. I love hooking into functions and extending addons so fields update each other intelligently, while locking out non-admins to sections. Blocks are great, don’t get me wrong, and the extensions to make the, more hookable and meta-integrated is nice, but CMB2 gives you full and complete control, with API documented and dozens of add on plugins out there. Using FacetWP? We have an add on! Need to attach posts? We have an add on? Want to use Shadow Taxonomies to connect posts instead of attaching them and somehow manage to do so dynamically and speedily? Hey buddy. They’ve got you. The power is yours to command. Seeing even a version-matching-tested-up-to update makes me worry far less that this plugin will fall by the wayside. Up next? PHP 8 compat (I hope…)
22 de noviembre de 2023
…easy to use, nice metaboxes for all post types
Read all 89 reviews

Contributors & Developers

“CMB2” is open source software. The following people have contributed to this plugin.

Contributors

“CMB2” has been translated into 18 locales. Thank you to the translators for their contributions.

Translate “CMB2” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

2.11.0

Enhancements

  • Package updates.
  • Update WordPress Tested up to tag 6.1. Props @RubenMartins (#1477).
  • Add filters for setting object_id and mb_object_type and in do_scripts – Allows overriding by plugins/libs. (Added to support the new CMB2 WooCommerce HPOS Orders extension)
  • Added a cmb2_init_hooks hook when hookup is called.
  • Addressed some security concerns with the unserialization process for the stored serialized DateTime field values (text_datetime_timestamp_timezone field type only). (#1510)
  • [Development] Some build script improvements.
  • [Development] Added some PHPCS/WPCS config.
  • [Development] Added a phpcompatibility action. Props @jazzsequence (#1499, #1500).

Bug Fixes

  • Fix some line-height issues with dashicon buttons. Fixes [#1443](
  • Fix issue where image can be attached to wrong group after removing previous group. (#1473)
  • Fixes issue where Select/Deselect all does not trigger change JS DOM events. Fixes #1504.

2.10.1

Bug Fixes

  • Fix issue with date picker formatting. Fixes #1448.

2.10.0

Enhancements

  • Sanitize URLs, defaulting to https. Props @paulschreiber (#1413).
  • Establish Cypress E2E Testing. Props @markjaquith (#1437).
  • Updated the JS shiftRows functionality to be simpler, and fix issues with JS initialization. Fixes #1426 and #1431.
  • Updated various NPM dependencies for security issues.

Bug Fixes

  • Update to prevent deprecation notice:Required parameter $i follows optional parameter $args.... Props @carloswph (#1417).
  • Make each date field more resilient to various date/timestamp values passed in (from REST API).

2.9.0

Enhancements

  • Added cmb2_tab_group_tabs filter for adding arbitrary menu page urls to the cmb2 tabs, and move tab markup output to separate method, CMB2_Options_Hookup::options_page_tab_nav_output(). Fixes #1407.
  • Limit use of italic, including removing from field descriptions. Fixes #1404.
  • Add to list of valid image types from get_allowed_mime_types(), which makes SVGs more reliable when using the Safe SVG plugin. Fixes #1223.

Bug Fixes

  • Fixes PHP warnings on repeatable ColorPicker with an array as default. Props @rubengc (#1340).
  • Address PHP 7.4, compatibility issues with func_get_args(). Fixes #1389.
  • Better generated array key for cached fields, fixes issue where wrong field is found. Fixes #14053.
  • Fix issue with options-pages being changed to register on a hook priority of 5 instead of the default 10, causing some back-compatibility issues. Fixes #1410.

2.8.0

Enhancements

Bug Fixes

  • Ensure enqueue wp-color-picker is enqueued for color fields. Props @rubengc (#1339).
  • Fix empty name/id attributes on 'file_list' buttons. Props @pgroot91 (#1347).
  • Fix wysiwyg field type not working in a group, by ensuring scripts properly enqueued. Props @yoren (#1361).
  • Fix $object_id doc block types in helper-functions.php. Fixes #1365.
  • Fix Metabox toggles visually broken with WP 5.5.x. Fixes #1382.
  • Fix PHP Deprecated: Required parameter $field_id follows optional parameter $type, due to changes in PHP 8.0. Fixes #1396.
  • Fix PHP notice caused by deprecated_param method in PHP 7.4. Props @jonathanstegall (#1400).

2.7.0

Enhancements

  • Added support for sortable columns by default, with ability to disable with 'column' => array( 'disable_sortable' => true ). Props @RubenMartins (#1281).
  • New field type, 'taxonomy_select_hierarchical'. Fixes #751
  • New text, textarea and wysiwyg character counter options. For now, this feature is not available to wysiwyg field types within repeatable groups. Props @gyrus (#1276).
    • The new parameters:
      • 'char_counter' – Defaults to false, no counter. Set to true, or words to count words instead of characters.
      • 'char_max' – integer. When defined, counter shows remaining characters/words.
      • 'char_max_enforce' – boolean, default: false. Currently only applied (as maxlength attribute) to text and textarea fields which use 'characters' for counter.
    • You can also override the default text strings associated with these parameters:
      • 'words_left_text' – Default: «Words left»
      • 'words_text' – Default: «Words»
      • 'characters_left_text' – Default: «Characters left»
      • 'characters_text' – Default: «Characters»
      • 'characters_truncated_text' – Default: «Your text may be truncated.»
  • Update styling to be more compatible with WordPress 5.3. Props @galengidman (#1314)
  • Add a new box parameter, register_rest_field_cb, which when used allows overriding the way CMB2 handles the register_rest_field callbacks, and defining your own REST prefix for your fields. See this PR comment for more context.
  • Cleanup by renaming CMB2_hookup to CMB2_Hookup. Classes are case-insensitive, so this is a backwards-compatible change. Props @szepeviktor (#1330, #1328).
  • Validate composer.json for Travis CI. Props @szepeviktor (#1326).
  • Added LICENSE file to meet GitHub Community standards. Props @RubenMartins (#1316).
  • Add new "cmb2_display_class_{$fieldtype}" filter and 'display_class' field parameter to allow specifying the class to use to display the field (in admin columns, etc).
  • Update CMB2_Types::_id() to allow not appending the iterator attribute if a repeatable field.
  • Added CMB2_Utils::concat_attrs() test for nested arrays as data attributes.
  • Various updates per VIP feedback. Props @kevinlangleyjr, @mikeselander (#1255, #1257, #1259, #1261 #1262, and various direct commits. See #1260).

Bug Fixes

  • Fix some issues with Travis. Props @anhskohbo (#1220).
  • Javascript: Correctly pass the newly created row to the cmb2_add_row triggered event.
  • Various code-formatting and code documentation improvements. Props @tw2113.
  • Don’t exclude composer.json from the distribution. Props @johnbillion (#1225).
  • Ignore some more directories in the distribution package. Props @johnbillion (#1226).
  • Use CMB2_Field::get_rest_value() to get values for fields in the post REST API endpoints (#1284).
  • Fix issue where oEmbed fields’ live-preview would not work if the field was added within a group, along with some other similarly related issues. Fixes #1157.
  • Fix issue when using REST API for file and text_datetime_timestamp_timezone field types, the supporting field data was not provided (e.g. the file id for file field, and the utc value for the text_datetime_timestamp_timezone field). Fixes https://wordpress.org/support/topic/cmb2-rest-api-image-file-field-as-an-object/.
  • Escaping Improvements to File Base and File Fields. Props @tomjn (#1296, #1297).
  • Fix issue where repeatable CodeMirror textareas could not be clicked/draggged to highlight text. Props @JPry (#1300).
  • taxonomy_select_hierarchical now saves to the correct location, the term relationships table. Props @latheva (#1307).
  • Fix issue (#1158) where default REST API endpoints (e.g. /wp/v2/{post_type}) would show all boxes for all custom post types even though not registered to the post-type. Props @Mte90 (#1238).
  • Update and cull npm dependencis. Fixes #1308.
  • Fix some jshint issues.
  • Updated the WordPress embeds URL references.
  • Updates to account for WordPress 5.2 oEmbed changes.
  • Fix to ensure date picker fields can have a default value. Fixes #1245.
  • Added function_exists( 'add_action' ) check to bootstrap file to ensure compatibility with composer usage. Props @salcode (#1271, #1270)
  • Corrected link to facetwp-cmb2 in README.md. Props @marcelreschke (#1248).
  • Use get_user_locale() in admin area instead of get_locale(). Fixes #1267.
  • CMB2::is_box_type() now also checks for taxonomies if box is registered to «term» object type. This should fix some issues where CMB2 term meta was not showing up in REST API requests to the term endpoints.

2.6.0

Bug Fixes

  • Remove superfluous method definitions. Props @tnorthcutt (#1200).
  • Fix rest_value_cb registering of filter. Props @lipemat (#1212).
  • Do not trigger tinyMCE editor save for the activeEditor. Prevents cursor jump in Gutenberg. Fixes #1202
  • Fix issue where making a field repeatable would generate a Javascript error because of missing sortable library. Props @slaFFik (#1216).
  • Ensure value passed to CMB2_Utils::filter_empty from CMB2::save_group_field is always an array. (#1026)
  • Fix potential issue with test path location. Props @quasel (#463).

Enhancements

  • Updated PHPUnit version in composer.json. Props @slaFFik (#1204).
  • Package.json: fix the need of global (old) grunt. Props @slaFFik (#1206).
  • Add optional confirmation dialog to group field’s Remove button. Example documented in the example functions file. Props @slaFFik (#1208).
  • Add ‘id’ attribute on group field .postbox divs to ensure compatibility with scripts which expect ids there. Props @amans2k (#1108).
  • Make CMB2_Option properties accessible. (#1052)
  • New Before/After row hooks: 'cmb2_before_field_row', "cmb2_before_{$field_type}_field_row", "cmb2_after_{$field_type}_field_row", 'cmb2_after_field_row'. Props @rubengc (#953).
  • Introduce three new filters to filter field arguments: 'cmb2_field_defaults', 'cmb2_field_arguments_raw', 'cmb2_field_arguments'. Props @jrfnl (#588).

2.5.1

Bug Fixes

  • Fix issue when the core/editor object does not exist (is undefined), causing incompatibility issues with Yoast and likely others. Fixes #1197

2.5.0

Enhancements

  • Repeatable fields are now drag-sortable. Props @lipemat (#1142).
  • Update the sv_SE translation. Props @edvind (#370).
  • QA/PHPCS cleanup. Props @tw2113 (#1179).
  • Add optional 'mb_callback_args' CMB2 box property which allows defining the $callback_args passed into add_meta_box(). This allows using defining the new Gutenberg/block-editor compatibility parameters. Fixes #1191
  • Support any type of markup when customizing repeating group row. Props @lipemat (#1187).
  • Add cmb_init_pickers and cmb_init_code_editors Javascript events for allowing just-in-time configuration for pickers/editors.
  • Fix field descriptions color contrast ratio for better accessibility. h/t @rianrietveld. Fixes #1193.
  • Add CMB2_Field::get_rest_value() method for sending value through several filters ('cmb2_get_rest_value', "cmb2_get_rest_value_{$field_type}", "cmb2_get_rest_value_for_{$field_id}" ) before sending to REST request.

Bug Fixes

  • Fix the options page errors when using CMB2 in WordPress prior to 4.7. Props @manzoorwanijk (#1166).
  • Fix occasonal fatal errors that can occur by using callback functions directly vs call_user_func. Props @manzoorwanijk (#1177).
  • Fix issue where wysiwyg fields’ visual tab wouldn’t save content on Gutenberg/block-editor posts. Props @staurand (#1190 fixes #1156).
  • Fix issue when remove_default wouldn’t actually remove the default taxonomy metabox when box registration used an alternate box context. Props @lipemat (#1147).

2.4.2

Bug Fixes

  • Do not enqueue/register WordPress code editor JS if there are no textarea_code fields registered on the page. Fixes #1110.
  • Do not set repeated wysiwyg field values to string «false» when boolean false. Fixes #1138 (again!).

2.4.1

Bug Fixes

  • Do not set repeated field values to string «false» when boolean false. Fixes #1138.

2.4.0

Enhancements

  • Enable linking options pages via tabbed-navigation. Will output tabbed navigation for options-pages which share the same 'tab_group' CMB2 box property. This snippet demonstrates how to create a top-level menu options page with multiple submenu pages, each with the tabbed navigation. To specify a different tab title than the options-page title, set the 'tab_title' CMB2 box property. See #301, #627.
  • Complete the zh-CN translation. Props @uicestone (#1089).
  • Update the nl_NL translation. Props @tammohaannl (#1101).
  • Better display for white over transparent images (e.g. logos) by using a checkered background for images. (#1103)
  • Ability to disable the options autoload parameter via filter ("cmb2_should_autoload_{$options_key}") or via a box parameter for 'options-page' box registrations ('autoload' => false,). (#1093)
  • 'textarea_code' field type now uses CodeMirror that is used by WordPress (#1096). A field can opt-out to return to the previous behavior by specifying an 'options' parameter:
    ‘options’ => array( ‘disable_codemirror’ => true )
    As with the other javascript-enabled fields, the code-editor defaults can be overridden via a data-codeeditor attribute. E.g:

    `php
    

    ‘attributes’ => array(
    ‘data-codeeditor’ => json_encode( array(
    ‘codemirror’ => array(
    ‘mode’ => ‘css’,
    ),
    ) ),
    ),
    `

  • Improve/add comment info banners at top of CMB2 CSS files.
  • Added resetBoxes/resetBox Javascript methods for resetting CMB2 box forms.
  • Improved styles for fields in the new-term form.
  • New CMB2_Boxes methods for filtering instances of CMB2, CMB2_Boxes::get_by( $property, $optional_compare ) and CMB2_Boxes::filter_by( $property, $to_ignore = null ).

Bug Fixes

  • Fix the 'taxonomy_*' fields when used for term fields/meta. Save the value to term-meta.
  • Clear the CMB2 fields when a term is added. Fixes #794.
  • Repeated fields now use registered field defaults for values. Fixes #1137.
  • Fixed the formatting for deprecated messages in the log.
  • Prevent opening of media modal when clicking the file «Download» link. Fixes #1130.

2.3.0

Enhancements

Bug Fixes

  • Update for compatibility with PHP 7.2 (e.g. fixes Fatal error: Declaration of CMB2_Type_Colorpicker::render() must be compatible with CMB2_Type_Text::render($args = Array)...). (#1070, #1074, #1075).

2.2.6.2

Bug Fixes

  • Fix another issue (introduced in 2.2.6) with repeatable fields not being able to save additional fields. Props @anhskohbo (#1059, #1058).
  • Only dequeue jw-cmb2-rgba-picker-js script (and enqueue our wp-color-picker-alpha) if it is actually found.

2.2.6.1

Enhancements

  • Merge in the CMB2 RGBa Colorpicker field type functionality to the CMB2 colopicker field type. Adds the ability to add an alpha (transparency) slider to the colorpicker by adding the 'alpha' option to the field options array. Thank you to JayWood for his work on his custom field type.

Bug Fixes

  • Fix issue (introduced in 2.2.6) with complex fields set as repeatable not being able to save additional fields. Fixes #1054.

2.2.6

Enhancements

  • Move the fetching of group label and description to after calling 'before_group' parameter.
  • Allow using the 'render_row_cb' param for group fields. Fixes #1041.
  • Allow resetting cached CMB2 field objects (new 3rd parameter to CMB2::get_field()).
  • Allow resetting cached callback results (CMB2_Base::unset_param_callback_cache()).
  • Persian translation provided by @reza-irdev (#1046).
  • Added a 'message_cb' box property, which allows defining a custom callback for adding options-save messages on options-page boxes.
  • Updated many the oembed-related unit tests to more reliably test the relevant parts, and not so much the actual success of the WordPress functions.
  • Updated travis config to Install PHP5.2/5.3 on trusty for unit tests. Stolen from gutenberg/pull/2049. Intended to compensate for Travis removing support for PHP 5.2/5.3.

Bug Fixes

  • Ensure 'file' field type ID is removed from the database if the 'file' field type’s value is empty (Support thread).
  • Fix JS errors when user_can_richedit() is false («Disable the visual editor when writing» user option is checked, or various unsupported browsers). See #1031.
  • Fix issue where some European date formats (e.g. F j, Y) would not properly translate into jQuery UI date formats. Support thread
  • Fix repeating fields within repeating groups having the values/indexes incorrectly associated. Props @daggerhart (#1047). Fixes #1035, #348.
  • Fixed multiple update messages on settings pages when CMB2 option pages were registered (#1049).
  • Fix issue where using multiple oembed fields could cause incorrectly cached arguments to be used.
  • Fix bug where 'select_all_button' => false was not working for 'taxonomy_multicheck' field type (#1005).

2.2.5.3

Enhancements

  • Update to instead initate CMB2 hookup via "cmb2_init_hookup_{$cmb_id}" hook. Allows plugins to unhook/rehook/etc.

Bug Fixes

  • Spelling/Grammar fixes. Props @garrett-eclipse (#1012).
  • Fix «PHP Strict Standards: Static function should not be abstract» notice.
  • Add CMB2_Utils::normalize_if_numeric() to address problems when using floats as select/radio values. Fixes #869. See #1013.
  • Fix issues with apostrophes in money values. (e.g. in Swiss German the thousand separator is an apostrophe). Props @ocean90 (#1014, #1015).
  • Provide public access to the CMB2_Options_Hookup::$option_key property.
  • Change the updated-settings notice query variable so that WordPress does not auto-add settings notices on top of ours.
  • For settings pages, only output settings errors if WordPress does not do it by default (for sub-pages of options-general.php), and if the errors are not disabled via the 'disable_settings_errors' box property.

2.2.5.2

Bug Fixes

  • Fix issue in 2.2.5 with non-sortable repeatable groups not having new groups values be emptied on creation/clone.
  • Fix issue in 2.2.5 with options pages not saving when parent_slug was used. Fixes #1008.

2.2.5.1

Bug Fixes

  • Fix issue in 2.2.5 which caused empty repeatable groups having the buttons set to have a disabled «Remove Group» button.

2.2.5 – 2017-08-07

Enhancements

  • Options pages are now first-class CMB2 citizens, and registering a box to show on an options page will automatically register the menu page and output the form on the page. See example. (The snippets in the snippet library will be updated to reflect this change)
  • Improved Options Page styling. Props @anhskohbo (#1006).
  • Improved cohesive styles for repeatable fields. Props @anhskohbo (#819).
  • New field types, 'taxonomy_radio_hierarchical', and 'taxonomy_multicheck_hierarchical', for displaying taxonomy options in a hierarchical layout. Props to eriktelepovsky for the working code. (#640)
  • Removing last repeat item row (and repeat group row) is now somewhat allowed in that the «remove» button simply resets the last item to empty. Fixes #312.
  • Enable the additional media library modal filters. Fixes #873.
  • Sanitize the attributes added via the cmb2_group_wrap_attributes filter.
  • New field parameter, 'query_args', which can be used by the 'taxonomy_*' fields. Provides ability to override the arguments passed to get_terms().
  • The cmb2_can_save filter now passes the CMB2 object as the 2nd parameter. Props @Arno33 (#994).
  • Update the file field type to work properly within a custom field context by allowing the passing of override arguments to CMB2_Types::file() method.
  • Many WordPress Code Standards improvements/updates. Props @bradp
  • Include absolute paths when including the core php files. Props @anhskohbo (#998).
  • Change language throught to reflect CMB2’s move to its own organization.
  • Break CMB2_Field:options() method apart to allow re-setting options from field params. Related: reaktivstudios/cmb2-flexible-content/pull/8.
  • New CMB2:box_types() method for getting the array of registered 'object_types' for a box. Ensures the return is an array.
  • Improved inline hooks documentation.
  • Updated several CMB2 methods to return the CMB2 object (for method chaining). Methods include:
    • CMB2::show_form()
    • CMB2::render_form_open()
    • CMB2::render_form_close()
    • CMB2::render_group_row()
    • CMB2::render_hidden_fields()
    • CMB2::save_fields()
    • CMB2::process_fields()
    • CMB2::process_field()
    • CMB2::pre_process()
    • CMB2::after_save()
    • CMB2::add_fields()

Bug Fixes

  • Update for file/file_list fields to properly show a preview for SVG images. Fixes #874.
  • Fix and standardize inconsistent button classes. Update all buttons to use the .button-secondary class instead of the .button class. This alleviates some front-end issues for themes which target the .button class. This is a backwards-compatibility break. If your theme or plugin targets the .button class within CMB2, you will need to update to use .button-secondary.
  • Correct the before/after form hooks order. For more details see (#954).
  • Fix regression with custom fields not properly repeating. Props @desrosj (#969). Fixes #901.
  • Fix «Illegal string offset» notices when CMB2_Option methods are called when the option value is empty, as well as additional unit tests for the CMB2_Option class. Props @anhskohbo (#993).
  • Fix bug where select fields or checkbox fields occasionally would retain previous group’s value when adding new groups. Fixes #853.
  • Fix JS to prevent meta keys with | or / from breaking file fields. Props @lipemat (#1003).
  • Fix jQuery Migrate’s jQuery.fn.attr('value', val) no longer sets properties warning.
  • Fix issue with CMB2 being too aggressive with stripping slashes from values. Fixes #981.

2.2.4 – 2017-02-27

Enhancements

  • Modify 'taxonomy_*' fields to return stored terms for non-post objects.
  • Modify CMB2::get_sanitized_values() to return the sanitized 'taxonomy_*' field values. Also added "cmb2_return_taxonomy_values_{$cmb_id}" filter to modify if 'taxonomy_*' field values are returned. Fixes #538.
  • Allow outputting CMB2 boxes/fields in additional locations in the post-editor.

    The new locations are: form_top, before_permalink, after_title, and after_editor

    These would be defined by setting the context property for your box:

    `php
    

    $cmb_demo = new_cmb2_box( array(

    ‘context’ => ‘before_permalink’,
    ) );
    `

    If it is preferred that the fields are output without the metabox, then omit the 'title' property from the metabox registration array, and instead add 'remove_box_wrap' => true,.

    Props @norcross (#836).

  • New field parameter, 'render_class', allowing you to override the default 'CMB2_Type_Base' class that is used when rendering the field. This provides interesting object-oriented ways to override default CMB2 behavior by subclassing the default class and overriding methods. The render class can also be overridden with the "cmb2_render_class_{$fieldtype}" filter, which is passed the default render class name as well as the CMB2_Types object, but this should be used sparingly, and within the context of your project’s boxes/fields or you could break other plugins’/themes’ CMB2 fields.
  • Improvements to the file/file_list fields javascript APIs, including using undersore templates.
  • Small improvements to the styling for the file_list field type.
  • New action hook, cmb2_footer_enqueue, which occurs after CMB2 enqueues its assets.
  • Example functions clean up. Props @PavelK27 (#866).
  • New CMB2_Utils methods, get_available_image_sizes() and get_named_size(). Props @Cai333.

Bug Fixes

  • Fix datepicker month/year dropdown text color. On windows, the option text was showing as white (invisible). Fixes #770.
  • Repeatable WYSIWYG no longer breaks if 'quicktags' param is set to false. Props @timburden (#797, #796).
  • Do not process title fields during group field save process.
  • Fix issue where term-meta values were not being displayed for some users. Props @sbussetti (#763, #700).
  • Fix issue where term meta would not be applied when using the new term form if multiple object types were specified. Props @ADC07 (#842, #841).
  • Fix WordPress spinner styling when boxes/fields used on the frontend.
  • Fix issue where clicking to remove a file_list item could occasionally remove the field row. (#828).
  • Fix issue where empty file field in group would still cause non-empty values to store to database. (#721).
  • Make file/file_list field preview images work with named sizes. Props @Cai333 (#848, #844).
  • Fix incorrect text-domain. (#798)
  • Do not silence notices/errors in CMB2_Utils::get_file_ext().
  • If title field type has no name value, then only output a span element (instead of a header element).

2.2.3.1 – 2016-11-08

Enhancements

  • Better styling for disabled group «X» buttons, and add title attr. Fixes #773.

Bug Fixes

  • Use quotes for label[for=""] selector. Fixed Syntax error, unrecognized expression. Props @anhskohbo (#789).
  • Fix ReferenceError: tinyMCE is not defined javascript errors (happening when trying to remove a repeatable field/group). Fixes #790, and #730.
  • Fix REST API 'show_in_rest' examples in example-functions.php. Any REST API boxes/fields must use the 'cmb2_init' hook (as opposed to the 'cmb2_admin_init' hook).

2.2.3 – 2016-10-25

Enhancements

  • CMB2 REST API! CMB2 now has WP REST API endpoints for displaying your boxes and fields data, as well as registers rest fields in the existing post, user, term, and comment endpoints (in the cmb2 namespace). Enabling the REST API for your boxes/fields is opt-in, meaning it will not be automatically enabled. For more info, check out the wiki.
  • Small string improvement, move a period inside the translatable string. Props @pedro-mendonca (#672).
  • Introduce the 'save_field' boolean field parameter for disabling the saving of a field. Useful if you want to display the value of another field, or use a disabled/read-only field. Props @jamesgol (#674, #346, #500).
  • Update docblocks for CMB2_Field::save_field_from_data() and CMB2_Field::save_field(). Props @jamesgol (#675).
  • More javascript events tied to the media modal actions (related to the 'file' and ‘file_list' fields). 'cmb_media_modal_init', 'cmb_media_modal_open', and 'cmb_media_modal_select'.
  • All CMB2 JS events now also get the CMB2 JS object passed in the list of arguments.
  • CMB2 JS object is now instantiated without stomping existing object, to enable extending.
  • New field parameter for taxonomy fields, 'remove_default' which allows disabling the default taxonomy metabox. Props @c3mdigital (#593).
  • Change 'row_classes' to just 'classes', to mirror the metabox 'classes' property. Also now accepts a 'classes_cb' parameter for specifying a callback which returns a string or array. The callback will receive $field_args as the first argument, and the CMB2_Field $field object as the second argument. ('row_classes' will continue to work, but is deprecated)
  • Make wysiwyg editors work in the repeatable groups context. A standard repeatable (non-group) wysiwyg field is not supported (but will possibly be included in a future update). Props @johnsonpaul1014 (#26, #99, #260, #264, #356, #431, #462, #657, #693).
  • Add an id to the heading tag in the title field. This allows linking to a particular title using the id.
  • Internationalization improvements. Props ramiy (#696).
  • Ensure that saving does not happen during a switch-to-blog session, as data would be saved to the wrong object. See more.
  • Add 'cmb2_group_wrap_attributes' filter to modifying the group wrap div’s attributes. Filter gets passed an array of attributes and expects the return to be an array. Props jrfnl (#582).
  • Update the unit-tests README and inline docs. Props bobbingwide (#714, #715).
  • Minor update to make naming-conventions consistent. Props ramiy (#718).
  • Update files to be compatible with PHP7 CodeSniffer standards. Props ryanshoover (#719, #720).
  • Make exception message translatable. Props ramiy (#724).
  • Portuguese translation provided by @alvarogois and @pedro-mendonca#709, #727.
  • Stop using $wp_version global. Props ramiy (#731).
  • Closures (anonymous functions) are now supported for any box/field '*_cb' parameters. E.g.
    php
    ...
    'show_on_cb' => function( $cmb ) { return has_tag( 'cats', $cmb->object_id ); },
    ...

Bug Fixes

  • If custom field types use a method and the Type object has not been instantiated, Try to guess the Type object and instantiate.
  • Normalize WordPress root path (ABSPATH) and theme rooth path (get_theme_root()). Props @rianbotha (#677, #676).
  • Fix issue with 'cmb2_remove_row' Javascript callback for non-group row removal. Fixes #729).
  • Fix issue with missing assignment of variable (undefined variable). Props @anhskohbo (#779).

2.2.2.1 – 2016-06-27

Bug Fixes

  • Fix issue that kept CMB2 stylesheet from being enqueued when using the options-page snippets.
  • Fix issue which caused the CMB2 column display styles to be enqueued in the wrong pages. Now only enqueues on admin pages with columns.

2.2.2 – 2016-06-27

Enhancements

  • You can now set admin post-listing columns with an extra field parameter, 'column' => true,. If you want to dictate what position the column is, use 'column' => array( 'position' => 2 ),. If you want to dictate the column title (instead of using the field 'name' value), use 'column' => array( 'name' => 'My Column' ),. If you need to specify the column display callback, set the 'display_cb' parameter to a callback function. Columns work for post (all post-types), comment, user, and term object types.
  • Updated Datepicker styles using JJJ’s «jQuery UI Datepicker CSS for WordPress», so props Props @stuttter, @johnjamesjacoby. Also cleaned up the timepicker styles (specifically the buttons) to more closely align with the datepicker and WordPress styles.
  • CMB2 is now a lot more intelligent about where it is located in your installation. This update should solve almost all of the reasons to use the 'cmb2_meta_box_url' filter (thought it will continue to work as expected). (#27, #118, #432, related wiki item)
  • Implement CMB2_Ajax as a singleton. Props jrfnl (#602).
  • Add classes and classes_cb CMB2 box params which allows you to add additional classes to the cmb-wrap. The classes parameter can take a string or array, and the classes_cb takes a callback which returns a string or array. The callback will receive $cmb as an argument. These classes are also passed through a new filter, 'cmb2_wrap_classes', which receives the array of classes as the first argument, and the CMB2 object as the second. Reported/requested in #364.
  • Make the 'title' field type accept extra arguments. Props @vladolaru, @pixelgrade (#656).
  • Updated cmb2_get_oembed() function to NOT return the «remove» link, as it’s intended for outputting the oembed only. This is a backwards-compatibility concern. If you were depending on the «remove» link, use cmb2_ajax()->get_oembed( $args ) instead.
  • New function, cmb2_do_oembed()‘, which is hooked to 'cmb2_do_oembed', so you can use do_action( 'cmb2_do_oembed', $args ) in your themes without function_exists() checks.
  • New method, CMB2:set_prop( $property, $value ), for setting a CMB2 metabox object property.
  • The CMB2_Field object instances will now have a cmb_id property and a get_cmb method to enable access to the field’s CMB2 parent object’s instance, in places like field callbacks and filters (e.g. $cmb = $field->get_cmb();).
  • Add a data-fieldtype attribute to the field rows for simpler identification in Javascript.
  • Moved each type in CMB2_Types to it’s own class so that each field type can handle it’s own field display, and added the infrastructure to maintainn back-compatibility.
  • New CMB2_Utils methods, notempty() and filter_empty(), both of which consider null, '' and false as empty, but allow 0 (for saving 0 as a field value).
  • New CMB2_Utils public methods, get_url_from_dir(), get_file_ext(), get_file_name_from_path(), and wp_at_least().
  • Add a cmb_pre_init Javascript event to allow overriding CMB2 defaults via JS.

Bug Fixes

  • Fix issue with ‘default’ callback not being applied in all instances. Introduced new CMB2_Field::get_default() method, and 'default_cb' field parameter. Using the 'default' field parameter with a callback will be deprecated in the next few releases. (#572).
  • Be sure to call CMB2_Field::row_classes() for group field rows. Also, update CSS to use the «cmb-type-group» classname instead of «cmb-repeat-group-wrap».
  • Introduce new 'text' and 'text_cb' field parameters for overriding CMB2 text strings instead of using the 'options' array. (#630)
  • Fix bug where the value of ‘0’ could not be saved in group fields.
  • Fix bug where a serialized empty array value in the database for a repeatable field would output as «Array».
  • Allow for optional/empty money field. Props @jrfnl (#577).
  • The CMB2::$updated parameter (which contains field ids for all fields updated during a save) now also correctly adds group field ids to the array.

2.2.1

Bug Fixes

  • Fixes back-compatibility issue which could allow multiple CMB2 instances to load (causing fatal errors). (#520)

2.2.0 – 2016-02-27

Enhancements

  • Term Meta! As of WordPress 4.4, WordPress will have the ability to use term metadata. CMB2 will work with term meta out of the box. To do so, see the example cmb registration in the yourprefix_register_taxonomy_metabox function in example-functions.php.
  • New hooks which hook in after save field action: 'cmb2_save_field' and "cmb2_save_field_{$field_id}". Props wpsmith (#475).
  • The «cmb2_sanitize_{$field_type}» hook now runs for every field type (not just custom types) so you can override the sanitization for all field types via a filter.
  • CMB2::show_form() is now composed of 3 smaller methods, CMB2::render_form_open(), CMB2::render_field(), CMB2::render_form_close() (#506).
  • RTL Style generated. Props @devinsays (#510).
  • Properly scope date/time-pickers styling by adding a class to only cmb2 picker instances. (#527)
  • Allow per-field overrides for the date/time/color picker options (wiki documentation: Modify Field Date, Time, or Color Picker options)
  • Fix some inline documentation issues. Props @jrfnl (#579).
  • Include .gitattributes file for excluding development resources when using Composer. Props @benoitchantre (#575, #53).

Bug Fixes

  • Fixed issue with 'taxonomy_select' field type where a term which evaluated falsey would not be displayed properly. Props adamcapriola (#477).
  • Fix issue with colorpickers not changing when sorting groups.