Legen Sie Anhangs-Tags aus den benutzerdefinierten Felddaten des Anhangs fest

Ich habe derzeit ein benutzerdefiniertes Feld zu meiner Anlage Formular namens artist_credit mit dem hook attachment_fields_to_edit hinzugefügt. Wenn eine Person einen Namen in das Künstler-Guthabenfeld eingibt, möchte ich, dass sie (wenn sie das Tag nicht bereits hat) ein Tag mit diesem Namen den Anhängen des Anhangs zuweisen, wenn der Anhang gespeichert wird.

Ich habe das Plugin WordPress Media Tags installiert, das mir erlaubt, ein Feld auf dem Anhang Formular zu haben, um Begriffe an die media_tag Taxonomie media_tag . Das Problem, das ich finde, ist, dass wenn ich den Haken attachment_fields_to_save . Das Speichern der Metadaten für den artist_credit ist in Ordnung (mit update_post_meta ), nur wenn ich wp_set_object_terms , um den artist_credit der media_tag Taxonomie media_tag , wird er zugewiesen (Tags werden zugewiesen, wenn get_the_terms für den Anhang des Anhangs get_the_terms ). Aber wenn ich dann erneut in das Bearbeitungsformular für den Anhang gehe, um die Ergebnisse zu sehen, wird das zusätzliche Kredit-Tag überhaupt nicht dem Attachment-Post zugewiesen.

Meine einzige Theorie ist, dass der media_tag Taxonomy-Wert NACH der attachment_fields_to_save Aktion ausgeführt wird, und dass er verständlicherweise mit einem false Wert ausgeführt wird, um keine Terme anzuhängen. Interessanterweise wird der Hook save_post nach dem Bearbeiten der Details des save_post nicht ausgetriggers, so dass ich diesen Hook nicht verwenden kann, um diesen artist_credit Wert der media_tag Taxonomie für diesen Anhang media_tag . Irgendwelche Vorschläge, was ich tun könnte?

Hier ist, wie ich es gerade mache:

 // 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 "Legen Sie Anhangs-Tags aus den benutzerdefinierten Felddaten des Anhangs fest"

Ich habe es geschafft, aber es funktioniert nicht vollständig.

Zunächst wird mit dem von Ihnen angegebenen Code kein bereits gespeichertes post_meta abgerufen.

Ich habe meinen Code im einleitenden Code dieses Tutorials erstellt:
http://wpengineer.com/2076/add-custom-field-attachment-in-wordpress/

Und verwende die reguläre post_tag-Taxonomie statt einer benutzerdefinierten.

Und schließlich gibt es einen Fehler, nachdem Sie den Media Upload Iframe geschlossen und “Update” gedrückt haben, werden die Tags gelöscht (keine Ahnung warum), aber wenn Sie einfach den Browser aktualisieren, sind die Tags da.

Wie auch immer, es gibt ein Stück, das zu einer vollständigen Antwort beitragen kann:
intval($post['ancestors'][0] ) in der 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; }