Alter and extend
Membership Term plugins are discovered automatically and can be altered by other modules.
Plugin discovery
Plugins live in src/Plugin/MembershipTerm/ and are annotated with the PHP attribute:
#[MembershipTerm(
id: "my_term",
label: new TranslatableMarkup("My term"),
allowOverrideStartDate: TRUE,
)]
Attribute class: Drupal\crm_membership\Attribute\MembershipTerm
Interface: Drupal\crm_membership\Plugin\MembershipTermInterface
Base class: Drupal\crm_membership\Plugin\MembershipTermBase
Plugin manager
Service ID: plugin.manager.crm_membership_term
Class: Drupal\crm_membership\Plugin\MembershipTermManager
The manager extends DefaultPluginManager and:
- Discovers plugins in the
Plugin/MembershipTermsubdirectory - Uses cache bin
crm_membership_term_plugins - Registers alter hook
crm_membership_term_info
Getting a plugin instance
$manager = \Drupal::service('plugin.manager.crm_membership_term');
$config = $membership_type->getMembershipTermPluginConfig();
$plugin = $manager->createInstance($membership_type->getMembershipTermPluginId(), $config);
$plugin->setMembership($membership);
The Membership entity’s getMembershipTerm() method performs this binding automatically.
hook_crm_membership_term_info()
Implement hook_crm_membership_term_info() in your module’s .module file (or use a hook class) to alter plugin definitions after discovery:
/**
* Implements hook_crm_membership_term_info().
*/
function my_module_crm_membership_term_info(array &$definitions): void {
if (isset($definitions['fixed_duration'])) {
$definitions['fixed_duration']['label'] = t('Calendar year (custom label)');
}
}
Alterations affect the Membership Type form plugin dropdown and any code using getDefinitions().
Listing definitions
$definitions = \Drupal::service('plugin.manager.crm_membership_term')->getDefinitions();
foreach ($definitions as $id => $definition) {
// $definition['label'], $definition['id'], etc.
}
Related
- Custom plugins — Implementing a new plugin
- Plugin overview — Built-in plugins and lifecycle
- Configuration reference — Per-plugin config keys