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);
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);
Share
Improve this question
asked Jul 10, 2020 at 0:07
OneFishTacoOneFishTaco
1013 bronze badges
4
|
1 Answer
Reset to default 0As 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);
add_filter('attachment_fields_to_save', 'save_custom_field_license', null, 2);
– RachC Commented Jul 10, 2020 at 0:47get_post_meta()
totrue
(to get a single value), and the 3rd parameter forselected()
tofalse
(to not echo the attribute). – Sally CJ Commented Jul 10, 2020 at 1:55