it-swarm.com.de

Speichern von Medien - Welcher Haken wird ausgelöst?

Howdi,

Ich versuche, Code auszulösen, der beim Speichern eines Bildes in der Medienbibliothek auftritt. Wie üblich wähle ich die Datei aus, lade sie hoch, gebe die Metadaten ein und klicke dann auf Speichern. An dieser Stelle möchte ich mich in WordPress einbinden und WordPress auf eine andere URL umleiten. Auf diese Weise kann der Benutzer nicht zu einer Liste hochgeladener Medien, sondern zu einem Bildbearbeitungsprogramm weitergeleitet werden.

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

Vielen Dank,

7
Richard Bagshaw

Eigentlich gibt es nach dem Hochladen der Mediendatei (en) keinen Haken, zumindest soweit ich weiß. Das Problem mit den verfügbaren Hooks beim Hochladen und Speichern von Mediendateien und -daten ist, dass sie auf einen Teil des Prozesses beschränkt sind und daher die Verwendung eines dieser Hooks nicht zuverlässig ist. Beispiel: add_attachment wird ausgelöst, nachdem eine neue Datei den Upload-Vorgang vor dem Bearbeiten der Dateimetadaten abgeschlossen hat. Wenn Sie den Benutzer an dieser Stelle umleiten möchten, wird der Upload-Vorgang für nachfolgende Dateien abgebrochen, wenn mehrere Dateien hochgeladen wurden. es könnte jedoch für andere Arten von Aktionen geeignet sein.

Für Ihren speziellen Fall können Sie sich jedoch am Aktions-Hook admin_init einhängen und prüfen, ob wir uns nach dem Hochladen oder Bearbeiten der Datei auf dem Bildschirm der Medienbibliothek befinden. Wir wissen, dass wir die Anzahl der Anhänge vor dem Hochladen speichern und mit der Anzahl der Anhänge nach dem Hochladen 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 erfolgreichem Hochladen oder Bearbeiten der Mediendatei zum Dashboard weiter. Sie können ihn an Ihre Bedürfnisse anpassen. Sie können auch einen anderen Administrator-Hook als admin_init auswählen, wenn Sie andere Aufgaben als die Umleitung ausführen möchten.

4
Ahmad M

Sieht so aus, als ob beim Speichern von Medien keine Aktion ausgeführt wird, aber es gibt einen Filter. Leider bedeutet das, dass Sie einige Dinge tun können, Sie können einfach nichts ausgeben oder Sie brechen 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 ein Array von Feldern, die von der Medienelement-Seite verwendet werden. Sie können auch andere Dinge ausprobieren, z. B. das Einhängen in einen allgemeineren Admin-Panel-Hook und das Überprüfen des Werts von $ _GET ['action'] für 'editattachment'.

3
eddiemoya

Vielleicht eine etwas verspätete Antwort, aber ich hatte ein ähnliches Szenario und wollte die Lösung teilen.

Im functions.php des Themas (das Erstellen eines Plugins würde auch funktionieren) habe ich den 'add_attachment'-Hook verwendet, um basierend auf jeder hochgeladenen Datei einen neuen Beitrag (benutzerdefinierten Beitragstyp 'talk') zu erstellen. Natürlich könnte das Beispiel etwas aufleuchten, aber dies funktionierte zum Parsen jedes hochgeladenen Medienanhangs.

<?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');
2
Calle