Custom field in media library not saving, selected() function not adding “selected” to select list input type

Following the approach in the developer docs for selected() but can’t get it to work with a custom field in the media library for a select list.

It won’t save the value, or become “selected”. Looks like WP is doing some js/ajax in the background here, so do I need to approach this differently or have a dumb typo?

Please see code below, help is appreciated.

/*
Add license field to media attachments 
*/

    function add_custom_field_license( $form_fields, $post ) {
        $license_field = get_post_meta($post->ID, 'license_field');
        $form_fields['license_field'] = [
            'label' => 'License',
            'input' => 'html',
            'html' => "<select name='attachments[{$post->ID}][license_field]' id='attachments-{$post->ID}-license_field'> 
        <option value='none' " . selected($license_field, "none") . ">None (all rights reserved)</option>
        <option value='CC0' " . selected($license_field, "CC0") . ">CC0</option>
        <option value='CC BY' " . selected($license_field, "CC BY") . ">CC BY</option>
        </select>",
        ];
        return $form_fields;
    }
    add_filter('attachment_fields_to_edit', 'add_custom_field_license', null, 2); 



/*
Save license field to media attachments
*/
function save_custom_field_license($post, $attachment) {  
    if( isset($attachment['license_field']) ){  
        update_post_meta($post['ID'], 'license_field', sanitize_text_field( $attachment['license_field'] ) );  
    }else{
         delete_post_meta($post['ID'], 'license_field' );
    }
    return $post;  
}
add_filter('attachment_fields_to_save', 'save_custom_field_licenser', null, 2);

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

As per outlined in the comments, by fixing a typo in my save function, and setting the third parameter in get_post_meta() to true, and false in selected() it worked liked a charm. Thanks everyone!

Here’s the working code in case anyone is trying to add a select list custom field to their media manager:

   /*
    Add license field to media attachments 
    */
    
    function add_custom_field_license( $form_fields, $post ) {
        $license_field = get_post_meta($post->ID, 'license_field', true);
        $form_fields['license_field'] = [
            'label' => 'License',
            'input' => 'html',
            'html' => "<select name='attachments[{$post->ID}][license_field]' id='attachments-{$post->ID}-license_field'> 
        <option value='none' " . selected($license_field, "none", false) . ">None (all rights reserved)</option>
        <option value='CC0' " . selected($license_field, "CC0", false) . ">CC0</option>
        <option value='CC BY' " . selected($license_field, "CC BY", false) . ">CC BY</option>
        <option value='CC BY-NC' " . selected($license_field, "CC BY-NC", false) . ">CC BY-NC</option>
        <option value='CC BY-SA' " . selected($license_field, "CC BY-SA", false) . ">CC BY-SA</option>
        <option value='CC BY-NC-ND' " . selected($license_field, "CC BY-NC-ND", false) . ">CC BY-NC-ND</option>
        </select>",
        ];
        return $form_fields;
    }
    add_filter('attachment_fields_to_edit', 'add_custom_field_license', null, 2); 
     
    /*
    Save license field to media attachments
    */

    function save_custom_field_license($post, $attachment) {  
        if( isset($attachment['license_field']) ){  
            update_post_meta($post['ID'], 'license_field', sanitize_text_field( $attachment['license_field'] ) );  
        }else{
             delete_post_meta($post['ID'], 'license_field' );
        }
        return $post;  
    }
    add_filter('attachment_fields_to_save', 'save_custom_field_license', null, 2);


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x