hasPermission('administer block classes')) { /** @var \Drupal\block\BlockInterface $block */ $block = $form_state->getFormObject()->getEntity(); // This will automatically be saved in the third party settings. $form['third_party_settings']['#tree'] = TRUE; $form['third_party_settings']['block_class']['classes'] = array( '#type' => 'textfield', '#title' => t('CSS class(es)'), '#description' => t('Customize the styling of this block by adding CSS classes. Separate multiple classes by spaces.'), '#default_value' => $block->getThirdPartySetting('block_class', 'classes'), ); } } /** * Implements hook_preprocess_HOOK(). */ function block_class_preprocess_block(&$variables) { // Blocks coming from page manager widget does not have id. if (!empty($variables['elements']['#id'])) { $block = Block::load($variables['elements']['#id']); if ($classes = $block->getThirdPartySetting('block_class', 'classes')) { $variables['attributes']['class'][] = $classes; } } }