【Drupal】フォームフィールドをカスタムしたい時のフック関数


例えば、カスタムしたいフィールドを含むコンテンツタイプのシステム内部名称が「hoge_content_type」、
カスタムしたいフィールドのシステム内部名称が「field_fuga_date」とする。
またfield_fuga_dateのフィールドは日付型でyyyy/mm/ddからyyyy/mmの形式に変更したいとする。

yyyy/mm形式のフィールド

通常のフィールドの時

<?php

use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_alter().
 */
function MY_MODULE_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form_id == 'node_hoge_content_type_edit_form') {
    $form['field_fuga_date']['widget'][0]['value']['#date_date_element'] = 'month';
    $form['field_fuga_date']['widget'][0]['value']['#date_date_format'] = 'Y-m';
  }
}

$form_idの値は、念の為kint関数を用いるかしてコンテンツ登録画面にアクセスし正しい値を確認した方が良い。

Paragraph内のフィールドの時

 /**
  * Implements hook_field_widget_WIDGET_TYPE_form_alter().
  */
 function MY_MODULE_field_widget_entity_reference_paragraphs_form_alter(&$element, &$form_state, $context) {
   if ($element['#paragraph_type'] == '<パラグラフのシステム内部名称>') {
     // yyyy/mmの形式にする
     $element['subform']['field_fuga_date']['widget'][0]['value']['#date_timezone'] = 'Asia/Tokyo';
     $element['subform']['field_fuga_date']['widget'][0]['value']['#date_date_element'] = 'month';
     $element['subform']['field_fuga_date']['widget'][0]['value']['#date_date_format'] = 'Y-m';
   }
 }