Note: all future development will continue on CMB2.
Contributors:
- WebDevStudios ( @webdevstudios / webdevstudios.com )
- Justin Sternberg ( @jtsternberg / webdevstudios.com )
- Jared Atchison ( @jaredatch / jaredatchison.com )
- Bill Erickson ( @billerickson / billerickson.net )
- Andrew Norcross ( @norcross / andrewnorcross.com )
Version: 1.2.0
Requires at least: 3.5
Tested up to: 3.9
License: GPLv2
Custom Metaboxes and Fields (CMB for short) will create metaboxes and forms with custom fields that will blow your mind.
- Create metaboxes to be used on post edit screens.
- Create forms to be used on options pages.
- Create forms to handle user meta and display them on user profile add/edit pages.
- Flexible API that allows you to use CMB forms almost anywhere, even on the front-end.
- Several field types are included and are listed below.
- Custom API hook that allows you to create your own field types.
- There are numerous hooks and filters, allowing you to modify many aspects of the library (without editing it directly).
- Repeatable fields for most field types are supported, as well as repeatable field groups.
titleAn arbitrary title field *texttext_smalltext_mediumtext_emailtext_urltext_moneytextareatextarea_smalltextarea_codetext_dateDate Pickertext_timeTime pickerselect_timezoneTime zone dropdowntext_date_timestampDate Picker (UNIX timestamp)text_datetime_timestampTest Date/Time Picker Combo (UNIX timestamp)text_datetime_timestamp_timezoneTest Date/Time Picker/Time zone Combo (serialized DateTime object)colorpickerColor pickerradio*radio_inline*taxonomy_radio*taxonomy_radio_inline*selecttaxonomy_select*checkbox*multichecktaxonomy_multicheck*taxonomy_multicheck_inlinewysiwyg(TinyMCE) *fileImage/File upload *â€file_listImage/File list uploadoembedConverts oembed urls (instagram, twitter, youtube, etc. oEmbed in the Codex)groupHybrid field that supports adding other fields as a repeatable group. *- Create your own custom field type
* Not available as a repeatable field
†Use file_list for repeatable
More on field types (GitHub wiki)
-
CMB Attached Posts Field from coreymcollins: Custom field type for attaching posts to a page.
-
CMB Field Type: Google Maps from mustardBees: Custom field type for Google Maps.
The
pw_mapfield stores the latitude/longitude values which you can then use to display a map in your theme. -
CMB Field Type: Select2 from mustardBees: Custom field types which use the Select2 script:
- The
pw_select fieldacts much like the default select field. However, it adds typeahead-style search allowing you to quickly make a selection from a large list - The
pw_multiselectfield allows you to select multiple values with typeahead-style search. The values can be dragged and dropped to reorder
- The
-
Taxonomy_MetaData: WordPress Helper Class for saving pseudo-metadata for taxonomy terms. Includes an extended class for using CMB to generate the actual form fields.
All contributions welcome. If you would like to submit a pull request, please check out the trunk branch and pull request against it.
- Place the CMB directory inside of your theme or plugin.
- Copy (and rename if desired)
example-functions.phpinto a folder above the CMB directory OR copy the entirety of its contents to your theme'sfunctions.phpfile. - 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).
- Profit.
Enhancements
- Add support for custom date/time formats. Props @Scrent. (#506)
- Simplify
wysiwygescaping and allow it to be overridden via theescape_cbparameter. (#491) - Add a 'Select/Deselect all' button for the
multicheckfield type. - Add title option for repeatable groups. Title field takes an optional replacement hash, "{#}" that will be replaced by the row number.
- New field parameter,
show_on_cb, allows you to conditionally display a field via a callback. (#47) - Unit testing (the beginning). Props @brichards and @camdensegal.
Bug Fixes
- Fixed issue where remove file button wouldn't clear the url field. (#514)
wysiwygfields now allow underscores. Fixes some wysiwyg display issues in WordPress 3.8. Props @lswilson. (#491)- Nonce field should only be added once per page. (#521)
- Fix
in_arrayissue when a post does not have any saved terms for a taxonomy multicheck. (#527) - Fixed error: 'Uninitialized string offset: 0 in cmb_Meta_Box_field.php...`. Props @DevinWalker. (#539, #549))
- Fix missing
filefield description. (#543, #547)
Bug Fixes
- Update
cmb_get_field_valuefunction as it was passing the parameters tocmb_get_fieldin the wrong order. - Fix repeating fields not working correctly if meta key or prefix contained an integer. (#503)
Bug Fixes
- Fix issue with
cmb_Meta_Box_types.phpcalling a missing method,image_id_from_url. (#502)
Bug Fixes
- Radio button values were not showing saved value. (#500)
Enhancements
- Repeatable groups
- Support for more fields to be repeatable, including oEmbed field, and date, time, and color picker fields, etc.
- Codebase has been revamped to be more modular and object-oriented.
- New filter,
"cmb_{$element}_attributes"for modifying an element's attributes. - Every field now supports an
attributesparameter that takes an array of attributes. Read more. - Removed
cmb_std_filterin favor ofcmb_default_filter. THIS IS A BREAKING CHANGE - Better handling of labels in sidebar. They are now placed on top of the input rather than adjacent.
- Added i18n compatibility to text_money. props @ArchCarrier, (#485)
- New helper functions:
cmb_get_fieldandcmb_get_field_valuefor getting access to CMB's field object and/or value. - New JavaScript events,
cmb_add_rowandcmb_remove_rowfor hooking in and manipulating the new row's data. - New filter,
cmb_localized_data, for modifiying localized data passed to the CMB JS.
Bug Fixes
- Resolved occasional issue where only the first character of the label/value was diplayed. props @mustardBees, (#486)
Enhancements
- Change the way the
'cmb_validate_{$field['type']}'filter works. It is now passed a null value vs saved value. If null is returned, default sanitization will follow. THIS IS A BREAKING CHANGE. If you're already using this filter, take note. - All field types that take an option array have been simplified to take
key => valuepairs (vsarray( 'name' => 'value', 'value' => 'key', )). This effects the 'select', 'radio', 'radio_inline' field types. The 'multicheck' field type was already using thekey => valueformat. Backwards compatibility has been maintained for those using the older style. - Added default value option for
taxonomy_selectfield type. props @darlantc, (#473) - Added
preview_sizeparameter forfile_listfield type. props @IgorCode, (#471) - Updated
file_listimages to be displayed horizontally instead of vertically. props @IgorCode, (#467) - Use
get_the_termswhere possible since the data is cached.
Bug Fixes
- Fixed wysiwyg escaping slashes. props @gregrickaby, (#465)
- Replaced
__DIR__, asdirname( __FILE__ )is easier to maintain back-compatibility. - Fixed missing table styling on new posts. props @mustardBees, (#438)
- Fix undeclared JS variable. @veelen, (#451)
- Fix
file_listerrors when removing all files and saving. - Set correct
object_idto be used later incmb_show_onfilter. @lauravaq, (#445) - Fix sanitization recursion memeory issues.
Enhancements
- Now works with option pages and site settings. (view example in wiki)
- two filters to override the setting and getting of options,
cmb_override_option_get_$option_keyandcmb_override_option_save_$option_keyrespectively. Handy for using plugins like WP Large Options (also here). - Improved styling on taxonomy (*tease*) and options pages and for new 3.8 admin UI.
- New sanitization class to sanitize data when saved.
- New callback field parameter,
sanitization_cb, for performing your own sanitization. - new
cmb_Meta_Box_types::esc()method that handles escaping data for display. - New callback field parameter,
escape_cb, for performing your own data escaping, as well as a new filter,'cmb_types_esc_'. $field['type'].
Bug Fixes
- Fixed wysiwyg editor button padding. props @corvannoorloos, (#391)
- A few php < 5.3 errors were addressed.
- Fields with quotation marks no longer break the input/textarea fields.
- metaboxes for Attachment pages now save correctly. Thanks @nciske for reporting. (#412)
- Occasionally fields wouldn't save because of the admin show_on filter.
- Smaller images loaded to the file field type will no longer be blown up larger than their dimensions.
- Added
text_datetime_timestamp_timezonetype, a datetime combo field with an additional timezone drop down, props @dessibelle - Added
select_timezonetype, a standalone time zone select dropdown. The time zone select can be used with standalonetext_datetime_timestampif desired. Props @dessibelle - Added
text_urltype, a basic url field. Props @dessibelle - Added
text_emailtype, a basic email field. Props @dessibelle - Added ability to display metabox fields in frontend. Default is true, but can be overriden using the
cmb_allow_frontend filter. If set to true, an entire metabox form can be output with thecmb_metabox_form( $meta_box, $object_id, $echo )function. Props @dessibelle, @messenlehner & @jtsternberg. - Added hook
cmb_after_tableafter all metabox output. Props @wpsmith file_listnow works like a repeatable field. Add as many files as you want. Props @coreymcollinstext,text_small,text_medium,text_url,text_email, &text_moneyfields now all have the option to be repeatable. Props @jtsternberg- Custom metaboxes can now be added for user meta. Add them on the user add/edit screen, or in a custom user profile edit page on the front-end. Props @tw2113, @jtsternberg
- Added field "before" and "after" options for each field. Solves issue with '$' not being the desired text_money monetary symbol, props @GaryJones
- Added filter for 'std' default fallback value, props @messenlehner
- Ensure oEmbed videos fit in their respective metaboxes, props @jtsternberg
- Fixed issue where an upload field with 'show_names' disabled wouldn't have the correct button label, props @jtsternberg
- Better file-extension check for images, props @GhostToast
- New filter,
cmb_valid_img_types, for whitelisted image file-extensions, props @jtsternberg
- Added field type and field id classes to each cmb table row, props @jtsternberg
- Added post type comparison to prevent storing null values for taxonomy selectors, props @norcross
- Added
oEmbedfield type with ajax display, props @jtsternberg
- Note: This release requires WordPress 3.3+
- Cleaned up scripts being queued, props @jaredatch
- Cleaned up and reorganized jQuery, props @GaryJones
- Use $pagenow instead of custom $current_page, props @jaredatch
- Fixed CSS, removed inline styles, now all in style.css, props @jaredatch
- Fixed multicheck issues (issue #48), props @jaredatch
- Fixed jQuery UI datepicker CSS conflicting with WordPress UI elements, props @jaredatch
- Fixed zeros not saving in fields, props @GaryJones
- Fixed improper labels on radio and multicheck fields, props @jaredatch
- Fixed fields not rendering properly when in sidebar, props @jaredatch
- Fixed bug where datepicker triggers extra space after footer in Firefox (issue #14), props @jaredatch
- Added jQuery UI datepicker packaged with 3.3 core, props @jaredatch
- Added date time combo picker, props @jaredatch
- Added color picker, props @jaredatch
- Added readme.md markdown file, props @jaredatch
- Added jQuery timepicker, props @norcross
- Added 'raw' textarea to convert special HTML entities back to characters, props @norcross
- Added missing examples on example-functions.php, props @norcross
- Added the new wp_editor() function for the WYSIWYG dialog box, props @jcpry
- Created 'cmb_show_on' filter to define your own Show On Filters, props @billerickson
- Added page template show_on filter, props @billerickson
- Improvements to the 'file' field type, props @randyhoyt
- Allow for default values on 'radio' and 'radio_inline' field types, props @billerickson
- Enabled the ability to define your own custom field types (issue #28). props @randyhoyt
- Added the ability to limit metaboxes to certain posts by id. props @billerickson
- Fixed define to prevent notices. props @destos
- Added text_date_timestap option. props @andrewyno
- Fixed WYSIWYG paragraph breaking/spacing bug. props @wpsmith
- Added taxonomy_radio and taxonomies_select options. props @c3mdigital
- Fixed script causing the dashboard widgets to not be collapsible.
- Fixed various spacing and whitespace inconsistencies
- Think we have a release that is mostly working. We'll say the initial release :)
- Problem inserting file url inside field for image with caption (issue #50) May be fixed, needs testing.
CMB_META_BOX_URLdoes not define properly in WAMP/XAMP (Windows) (issue #31) May be fixed, needs testing.- Metabox containing WYSIWYG editor cannot be moved (this is a TinyMCE issue)
Enhancements
- Fix known issues (above)
- move timepicker and datepicker jQuery inline
- support for multiple configurable timepickers/datepickers
- add ability to save fields in a single custom field
- add ability to mark fields as required
- repeatable fields (halfway there)
- look at possiblity of tabs
- look at preserving taxonomy hierarchies
- Add input attributes filter
- Always load newest version of CMB
- Helper function to easily get oembed from stored oEmbed field