Using WordPress ‘attachment_fields_to_edit’ PHP filter

The attachment_fields_to_edit WordPress PHP filter allows you to modify the array of attachment form fields in the media library.

Usage

add_filter('attachment_fields_to_edit', 'your_function_name', 10, 2);

function your_function_name($form_fields, $post) {
  // your custom code here
  return $form_fields;
}

Parameters

  • $form_fields (array): An array of attachment form fields.
  • $post (WP_Post): The WP_Post attachment object.

More information

See WordPress Developer Resources: attachment_fields_to_edit

Examples

Add a custom text field to attachment form fields

add_filter('attachment_fields_to_edit', 'add_custom_text_field', 10, 2);

function add_custom_text_field($form_fields, $post) {
  $form_fields['custom_text'] = array(
    'label' => 'Custom Text',
    'input' => 'text',
    'value' => get_post_meta($post->ID, '_custom_text', true),
  );

  return $form_fields;
}

Remove the caption field from attachment form fields

add_filter('attachment_fields_to_edit', 'remove_caption_field', 10, 2);

function remove_caption_field($form_fields, $post) {
  unset($form_fields['post_excerpt']);
  return $form_fields;
}

Change the label of the description field

add_filter('attachment_fields_to_edit', 'change_description_label', 10, 2);

function change_description_label($form_fields, $post) {
  $form_fields['post_content']['label'] = 'Custom Description';
  return $form_fields;
}

Make the alt text field required

add_filter('attachment_fields_to_edit', 'make_alt_text_required', 10, 2);

function make_alt_text_required($form_fields, $post) {
  $form_fields['_wp_attachment_image_alt']['required'] = true;
  return $form_fields;
}

Add a custom dropdown field to attachment form fields

add_filter('attachment_fields_to_edit', 'add_custom_dropdown_field', 10, 2);

function add_custom_dropdown_field($form_fields, $post) {
  $options = array(
    'option1' => 'Option 1',
    'option2' => 'Option 2',
    'option3' => 'Option 3',
  );

  $form_fields['custom_dropdown'] = array(
    'label' => 'Custom Dropdown',
    'input' => 'html',
    'html' => build_dropdown('custom_dropdown', $options, get_post_meta($post->ID, '_custom_dropdown', true)),
  );

  return $form_fields;
}

function build_dropdown($name, $options, $selected) {
  $dropdown = "<select name='attachments[{$post->ID}][{$name}]'>";
  foreach ($options as $value => $label) {
    $dropdown .= "<option value='{$value}'" . selected($selected, $value, false) . ">{$label}</option>";
  }
  $dropdown .= "</select>";
  return $dropdown;
}