Speichermedien – Welcher Haken wird ausgetriggers?

Howdi,

Ich versuche, Code zu schießen, der auftreten wird, wenn ich ein Bild in der Medienbibliothek speichern werde, wie üblich, wähle ich die Datei aus, lade hoch, gebe die Metadaten ein und klicke dann auf Speichern. An dieser Stelle möchte ich in WordPress einhaken und WordPress auf eine andere URL redirect. Dies ist so, dass ich den Benutzer nicht zu einer Liste von hochgeladenen Medien führen kann, sondern sie stattdessen zu einem Bildmanipulationswerkzeug bringen kann.

Ich habe einen Filter gefunden, der kurz vor der Erstellung der Metadaten ausgetriggers wird, aber nichts, wenn die Datei gespeichert wird?

Vielen Dank,

Solutions Collecting From Web of "Speichermedien – Welcher Haken wird ausgetriggers?"

Tatsächlich gibt es keinen Haken nach dem Hochladen von Mediendateien, zumindest soweit ich weiß. Das Problem mit den Hooks, die beim Hochladen und Speichern von Mediendateien und Daten zur Verfügung stehen, besteht darin, dass sie auf einen Teil des processes beschränkt sind und daher die Verwendung von ihnen nicht zuverlässig ist. Beispielsweise wird add_attachment ausgetriggers, nachdem eine neue Datei den Upload-process abgeschlossen hat, bevor die Metadaten der Datei bearbeitet wurden. Wenn Sie den Benutzer an dieser Stelle redirect add_attachment , wird der add_attachment für nachfolgende Dateien unterbrochen, wenn mehr als eine Datei hochgeladen wird. es könnte jedoch für andere Arten von Aktionen geeignet sein.

Für Ihren speziellen Fall können Sie jedoch den admin_init Hook admin_init und prüfen, ob wir nach dem Hochladen oder Bearbeiten der Datei auf dem Medienbibliotheksbildschirm sind. Wir wissen, dass Sie die Anzahl der Anhänge vor dem Hochladen speichern und danach die Anzahl der Anhänge vergleichen der Upload:

 add_action('admin_init', 'redirect_after_media_save'); function redirect_after_media_save() { global $pagenow; // when visiting the upload screen, we save the number of attachments if ( $pagenow == 'media-new.php' ) { $attachments_before = array_sum((array)wp_count_attachments()); update_option('count_attach_before', $attachments_before); } if ( $pagenow == 'upload.php' ) { // we are on media library page // get attachments count before and after upload $attachments_before = get_option('count_attach_before'); $attachments_after = array_sum((array)wp_count_attachments()); if ( // there are new files uploaded ( wp_get_referer() == admin_url('media-new.php') && $attachments_after > $attachments_before ) || // or we have just edited media file isset($_GET['posted']) ) { // redirect to desired location wp_redirect(admin_url()); exit; } } } 

Dieser Code leitet den Benutzer nach dem erfolgreichen Hochladen oder Bearbeiten der Mediendatei zum Dashboard um. Sie können ihn an Ihre Bedürfnisse anpassen. Sie können auch einen anderen Admin-Hook als admin_init wenn Sie andere Aufgaben als die Umleitung ausführen möchten.

Es scheint, als ob keine Aktion zum Speichern von Medien vorhanden ist, aber es gibt einen Filter. Unglücklicherweise bedeutet das, dass man etwas tun kann, man kann einfach nichts aussprechen oder man bricht den Filter.

 add_filter('attachment_fields_to_save', 'attachment_stuff'); function attachment_stuff($stuff){ //Do stuff here, but don't echo anything or you'll break the filter. return $stuff; } 

$ stuff ist eigentlich ein Array von Feldern, die von der Medienelementseite verwendet werden. Sie könnten andere Dinge ausprobieren, wie beispielsweise das Einhaken in einen allgemeineren Admin-Panel-Hook und das Suchen nach dem $ _GET [‘action’] – Wert von ‘editattachment’.

Vielleicht ein bisschen späte Antwort, aber ich hatte ein ähnliches Szenario und wollte die Lösung teilen.

In functions.php des Themas (Erstellen eines Plugins würde auch funktionieren), habe ich den 'add_attachment' Hook verwendet, um einen neuen Beitrag (benutzerdefinierter Beitragstyp ‘Diskussion’) basierend auf jeder neuen hochgeladenen Datei zu erstellen. Natürlich könnte das Beispiel ein bisschen aufleuchten, aber das funktionierte für das Parsen jedes Medienanhangs, der hochgeladen wurde.

 < ?php function cpt_from_attachment($attachment_ID) { global $current_user; get_currentuserinfo(); $attachment_post = get_post( $attachment_ID ); $type = get_post_mime_type($attachment_ID); if(strpos($type, 'audio') === 0) { // Create new custom post object only for audio files $my_post = array( 'post_title' => $attachment_post->post_title, 'post_content' => $attachment_post->post_content, 'post_type' => 'talk', 'post_author' => $current_user->ID ); // Insert the custom post into the database $post_id = wp_insert_post( $my_post ); wp_update_post( array( 'ID' => $attachment_ID , 'post_parent' => $post_id ) ); wp_set_post_terms( $post_id, get_post_meta($attachment_ID, "artist", true), 'speaker' ); } } add_action("add_attachment", 'cpt_from_attachment');