Using WordPress ‘get_attachment_fields_to_edit()’ PHP function

The get_attachment_fields_to_edit() WordPress PHP function retrieves the attachment fields to edit form fields.

Usage

To use the function, simply pass the required $post object and the optional $errors array as parameters. Here’s an example:

$post = get_post($attachment_id);
$errors = array();
$fields = get_attachment_fields_to_edit($post, $errors);

Parameters

  • $post (WP_Post) – The attachment post object.
  • $errors (array) – Optional. An array containing errors. Default is an empty array.

More information

See WordPress Developer Resources: get_attachment_fields_to_edit

Examples

Display attachment fields to edit

This example retrieves the attachment fields and displays them in a table.

$post = get_post($attachment_id);
$fields = get_attachment_fields_to_edit($post);

echo '<table>';
foreach ($fields as $key => $field) {
    echo '<tr>';
    echo '<td>' . $field['label'] . '</td>';
    echo '<td>' . $field['input'] . '</td>';
    echo '</tr>';
}
echo '</table>';

Add a custom field to the attachment fields

This example demonstrates how to add a custom field to the attachment fields array.

function add_custom_field($fields, $post) {
    $fields['custom_field'] = array(
        'label' => 'Custom Field',
        'input' => 'text',
        'value' => get_post_meta($post->ID, '_custom_field', true),
    );
    return $fields;
}
add_filter('attachment_fields_to_edit', 'add_custom_field', 10, 2);

Modify an existing field in the attachment fields

This example modifies the “Description” field’s label in the attachment fields array.

function modify_description_field($fields, $post) {
    if (isset($fields['post_content'])) {
        $fields['post_content']['label'] = 'Custom Description';
    }
    return $fields;
}
add_filter('attachment_fields_to_edit', 'modify_description_field', 10, 2);

Remove a field from the attachment fields

This example removes the “Caption” field from the attachment fields array.

function remove_caption_field($fields, $post) {
    unset($fields['post_excerpt']);
    return $fields;
}
add_filter('attachment_fields_to_edit', 'remove_caption_field', 10, 2);

Save custom field data

This example demonstrates how to save the custom field data when the attachment is updated.

function save_custom_field($attachment_id) {
    if (isset($_POST['attachments'][$attachment_id]['custom_field'])) {
        $custom_field = $_POST['attachments'][$attachment_id]['custom_field'];
        update_post_meta($attachment_id, '_custom_field', $custom_field);
    }
}
add_action('edit_attachment', 'save_custom_field');