Definir tags de anexo de dados de campo personalizados do anexo

Atualmente, tenho um campo personalizado adicionado ao formulário do meu anexo chamado artist_credit usando o hook attachment_fields_to_edit . Quando uma pessoa insere um nome no campo de crédito do artista, quero que ele (se já não tiver a etiqueta) atribua uma marca com esse nome às tags do anexo quando o anexo é salvo.

Eu tenho o plugin WordPress Media Tags instalado que me permite ter um campo no formulário do anexo para append termos à taxonomia media_tag . O problema que estou encontrando é que, quando uso o hook attachment_fields_to_save . Salvar o metadado para o artist_credit está bem (usando update_post_meta ), é só isso quando eu uso wp_set_object_terms para adicionar o artist_credit à taxonomia media_tag , ele o atribui (as tags são atribuídas quando eu get_the_terms para a postagem de anexo), mas quando eu vou para o formulário de edição para o anexo novamente para ver os resultados, a marca de crédito extra não é atribuída à postagem de anexo.

Minha única teoria é que o valor da taxonomia media_tag é executado APÓS a ação attachment_fields_to_save , e que, compreensivelmente, provavelmente é executado com um valor false para não append termos. Curiosamente, o gancho save_post não é triggersdo depois de editar os detalhes do anexo, de modo que eu não consigo usar esse gancho para adicionar esse valor artist_credit à taxonomia media_tag para esta publicação anexa. Alguma sugestão sobre o que eu poderia fazer?

Veja como eu estou fazendo isso atualmente:

 // Add custom fields to attachments function example_add_attachment_fields($form_fields, $post) { // Create artist_credit custom field $form_fields['artist_credit'] = array( 'label' => 'Artist Credit', 'input' => 'text', ); return $form_fields; } add_filter('attachment_fields_to_edit', 'example_add_attachment_fields', null, 2); // Save attachment's custom fields' values function example_save_attachment_fields($post, $attachment) { // Save extra attachment fields if ( isset($attachment['artist_credit']) ) { update_post_meta($post['ID'], 'artist_credit', $attachment['artist_credit']); // Add artist_credit as a term to the attachment post wp_set_object_terms( $post['ID'], $attachment['artist_credit'], 'media_tag', true ); } return $post; } add_filter('attachment_fields_to_save', 'example_save_attachment_fields', null, 2); 

Solutions Collecting From Web of "Definir tags de anexo de dados de campo personalizados do anexo"

Consegui fazê-lo funcionar, mas não totalmente.

Primeiro, o código que você forneceu não está recuperando um post_meta já salvo.

Eu basei meu código no código introdutório deste tutorial:
http://wpengineer.com/2076/add-custom-field-attachment-in-wordpress/

E estou usando a taxonomia post_tag regular em vez de uma personalizada.

E, por último, há um erro, depois de fechar o iframe de Upload de mídia e clicar em “Atualizar”, as tags são apagadas (sem idéia do porquê), mas se você simplesmente atualizar o navegador, as tags estão lá.

De qualquer forma, há uma peça que pode contribuir para uma resposta completa:
intval($post['ancestors'][0] ) na function wp_set_post_terms

 add_filter( 'attachment_fields_to_edit', 'fb_attachment_fields_edit', 10, 2); add_filter( 'attachment_fields_to_save', 'fb_attachment_fields_save', 10, 2); function fb_attachment_fields_edit($form_fields, $post) { $form_fields['artist_credit']['label'] = __( 'Example Custom Field', '' ); $form_fields['artist_credit']['value'] = get_post_meta($post->ID, 'artist_credit', true); $form_fields['artist_credit']['helps'] = __( 'A helpful text for this field.', '' ); return $form_fields; } // save custom field to post_meta function fb_attachment_fields_save($post, $attachment) { if ( isset($attachment['artist_credit']) && '' !== $attachment['artist_credit'] ) { update_post_meta($post['ID'], 'artist_credit', $attachment['artist_credit']); $check = wp_set_post_terms( intval($post['ancestors'][0]), $attachment['artist_credit'], 'post_tag', true ); } return $post; }