Anexos de mídia Meta Meta Fields não salvando em Media Uploader quando usar jQuery UI Autocompletar

Estou tentando escrever um plugin que adiciona um meta-campo personalizado aos anexos de imagem para dar às imagens um campo de crédito. Eu uso os filtros ‘attachment_fields_to_edit’ e ‘attachment_fields_to_save’.

function hrld_attachment_field_credit( $form_fields, $post ) { $value = get_post_meta( $post->ID, '_hrld_media_credit', true ); $form_fields['hrld_media_credit']['label'] = 'Media Credit'; $form_fields['hrld_media_credit']['input'] = 'html'; $form_fields['hrld_media_credit']['html'] = 'ID.'-hrld_media_credit" name="attachments['.$post->ID.'][hrld_media_credit]" value="'.$value.'">'; $form_fields['hrld_media_credit']['helps'] = 'If photo was taken by a Herald photographer, use their username. eg "Bucky Badger" You should write "bbadger".'; return $form_fields; } add_filter( 'attachment_fields_to_edit', 'hrld_attachment_field_credit', 10, 2 ); 

O acima adiciona o campo de input.

 function hrld_attachment_field_credit_save( $post, $attachment ) { if( isset( $attachment['hrld_media_credit'] ) ) update_post_meta( $post['ID'], '_hrld_media_credit', $attachment['hrld_media_credit'] ); return $post; } add_filter( 'attachment_fields_to_save', 'hrld_attachment_field_credit_save', 10, 2 ); 

E o acima desencadeia salvar os meta-dados.

A questão surge ao editar uma postagem e você clicar no botão “Adicionar mídia” para adicionar uma imagem. Ao alterar os metadados de uma imagem dentro deste quadro de carregador de mídia, como legenda ou texto alternativo, o WordPress salvará automaticamente os dados quando o campo de texto perderá o foco. Meus metadados também são salvos de forma semelhante sem nenhum problema. Eu adicionei um filtro para ‘image_send_to_editor’ para adicionar automaticamente o campo de crédito dentro de uma marca de legenda se os dados de crédito estiverem presentes.

 function hrld_media_credit_send_editor($html, $id, $caption, $title, $align, $url, $size){ $html = get_image_tag($id, '', $title, $align, $size); $hrld_credit = get_hrld_media_credit($id); if(isset($hrld_credit) && !empty($hrld_credit)){ if(get_user_by('login', $hrld_credit)){ $hrld_user = get_user_by('login', $hrld_credit); $html_text = 'Photo by '.$hrld_user->display_name.'.'; } else{ $html_text = ''.$hrld_credit.'.'; } if($caption){ $html = get_image_tag($id, '', $title, $align, $size); $html .= $html_text; } else{ $attach_attributes = wp_get_attachment_image_src($id, $isze); $html = '.'"]'; $html .= get_image_tag($id, '', $title, $align, $size); $html .= $html_text; $html .= ''; } } return $html; } add_filter( 'image_send_to_editor', 'hrld_media_credit_send_editor', 10, 7 ); 

Mais uma vez, as coisas funcionam como esperado. A funcionalidade que eu quero é usar jQuery UI Autocompletar para sugerir logins de usuários conforme o usuário digita, mas eu quero manter o campo de input livre de texto porque um crédito de imagem não precisa ser um usuário no wordpress. Eu uso esse javascript para adicionar a function de preenchimento automático a cada campo.

 jQuery("body").on("keydown", ".hrld_media_credit_input", function(){ var hrld_media_input = jQuery(this); hrld_media_input.autocomplete({ source: hrld_user_tags, select: function (event, ui) { console.log(hrld_media_input); hrld_media_input.attr("value", ui.item.value); } }); }); 

O motivo pelo qual eu uso .on () é que, ao usar o botão “Adicionar mídia”, ele cria os campos de input dinamicamente, então, sem o .on (), ele só aplicará o preenchimento automático na carga de página, que esses campos de input não terão existiu ainda. (Eu omitei um pouco de código php que cola esse script, bem como cria a variável hrld_user_tags, que é apenas uma série de nomes de usuários).

Agora, ao usar o autocomplete para selecionar um nome de usuário sugerido, clicando nesse nome para preencher o campo, o wordpress não salvará automaticamente esses metadados. Se eu for inserir para postar, ele não será colocado em uma legenda, como se eu nunca entrei em um nome de usuário. No entanto, se eu digitar no campo e ver que “exemplo” é uma sugestão, se, ao invés de clicar na sugestão para preencher automaticamente o campo, acabei de digitar “exemplo” manualmente e, em seguida, pressione “Inserir para postar”, ele salva o metadata “exemplo” e irá inseri-lo em uma legenda.

Procurei por horas para obter respostas a esse problema, olhei para o wp-includes e os arquivos principais do wp-admin tentando encontrar funções para aplicar filtros ou adicionar ações para ativar a gravação de meus dados, mas não consigo descobrir isso.

Qualquer ajuda ou insights sobre este problema serão muito apreciados.

Solutions Collecting From Web of "Anexos de mídia Meta Meta Fields não salvando em Media Uploader quando usar jQuery UI Autocompletar"