Add an attribute to attachments

Currently attachments have

  • title
  • caption
  • alt text
  • description

I would like to add another attribute to that list (e.g source). How can I do this ?

Related posts

1 comment

  1. This can be done with two filters, attachment_fields_to_edit and attachment_fields_to_save, which do exactly what their names suggest. Let’s say you wan to add a source field. First, generate the field and fill it with its current value if that exists:

    function wpse133608_add_attachment_location_field( $form_fields, $post ) {
        $field_value = get_post_meta( $post->ID, 'source', true );
        $form_fields['source'] = array(
            'value' => $field_value ? $field_value : '',
            'label' => __( 'Source' ),
            'helps' => __( 'Set a source for this attachment' )
        );
        return $form_fields;
    }
    add_filter( 'attachment_fields_to_edit', 'wpse133608_add_attachment_location_field', 10, 2 );
    

    Then make sure the field is saved if it has content:

    function wpse133608add_image_attachment_fields_to_save( $post, $attachment ) {
        if ( isset( $attachment['source'] ) )
            update_post_meta( $post['ID'], '_source', esc_attr($attachment['source']) );
    
        return $post;
    }
    add_filter("attachment_fields_to_save", "wpse133608_add_image_attachment_fields_to_save", null , 2);
    

    Read more in this extensive tutorial.

Comments are closed.