On this page
Extending Custom Field widget plugins
Last updated on
31 March 2025
While the module provides an extensive set of widgets out of the box, we provide the ability to extend them further to meet your specific needs.
How to extend a widget plugin
- Review the existing widgets in the module folder:
/modules/contrib/custom_field/src/Plugin/CustomField/FieldWidget - Create a CustomField/FieldWidget plugin directory in your module:
/src/Plugin/CustomField/FieldWidget - Copy one of the widgets from step #1 into this directory.
- Rename the file and class name accordingly.
- Open the file and modify the attributes.
- id - Change the id to a unique name (required). Prefixing with your module name is recommended.
- label - Change the label to a human friendly name that will differentiate it from other widgets in the UI.
- description - Provide a description (optional)
- category - Change the category (optional). It will default to 'General' if no category is provided.
- field_types - At least one field type is required. In most cases, you will want to maintain the original value from the plugin you're extending to prevent unexpected issues of incompatibility.
- Modify the existing methods in the class.
- Clear the cache.
- Edit the field widget settings for your custom field.
- You should now be able to select your new widget type for a field with a matching data type
- Here's an example of a class that extends the SelectWidget plugin:
<?php namespace Drupal\my_module\Plugin\CustomField\FieldWidget; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\custom_field\Attribute\CustomFieldWidget; use Drupal\custom_field\Plugin\CustomField\FieldWidget\SelectWidget; /** * Plugin implementation of the 'my_module_custom_select' widget. */ #[CustomFieldWidget( id: 'my_module_custom_select', label: new TranslatableMarkup('Select list (My module'), category: new TranslatableMarkup('Lists'), field_types: [ 'string', 'integer', 'float', ], )] class CustomSelectWidget extends SelectWidget { // My custom code. }
Help improve this page
Page status: No known problems
You can:
You can:
- Log in, click Edit, and edit this page
- Log in, click Discuss, update the Page status value, and suggest an improvement
- Log in and create a Documentation issue with your suggestion
Still on Drupal 7? Security support for Drupal 7 ended on 5 January 2025. Please visit our Drupal 7 End of Life resources page to review all of your options.