Speichern von Medien - Welcher Haken wird ausgelöst?

7

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 zu einer anderen URL umleiten. Auf diese Weise kann ich den Benutzer nicht zu einer Liste hochgeladener Medien führen, sondern stattdessen zu einem Bildbearbeitungswerkzeug.

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

Vielen Dank,

Richard Bagshaw
quelle
Versuchen Sie es mit dem Hikari Hooks Troubleshooter . Es hat mir geholfen, den Haken freizulegen, den ich für eine benutzerdefinierte Aktion benötigt habe.
CPILKO
Richard, bist du sicher, dass keine der Antworten auf deine Fragen richtig ist? Bitte überprüfen Sie die FAQ, insbesondere die "Wie stelle ich hier Fragen?" Abschnitt ...
brasofilo

Antworten:

4

Tatsächlich wird nach dem Hochladen von Mediendateien kein Hook ausgelöst, zumindest soweit ich weiß. Das Problem mit den beim Hochladen und Speichern von Mediendateien und -daten verfügbaren Hooks besteht darin, dass sie auf einen Teil des Prozesses beschränkt sind und daher die Verwendung eines dieser Hooks nicht zuverlässig ist. add_attachmentWird beispielsweise ausgelöst, nachdem eine neue Datei den Upload-Vorgang abgeschlossen hat, bevor die Dateimetadaten bearbeitet werden. Wenn Sie den Benutzer an dieser Stelle umleiten möchten, wird der Upload-Vorgang für nachfolgende Dateien unterbrochen, wenn mehr als eine Datei hochgeladen wurde könnte jedoch für andere Arten von Aktionen geeignet sein.

Für Ihren speziellen Fall können Sie sich jedoch an den admin_initAktions-Hook binden 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 sie mit der Anzahl der Anhänge nach dem Hochladen vergleichen hochladen:

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. Möglicherweise möchten Sie auch einen anderen Admin-Hook auswählen, als admin_initwenn Sie andere Aufgaben als die Umleitung ausführen möchten.

Ahmad M.
quelle
3

Es 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 wiedergeben oder Sie werden den Filter brechen.

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önnen auch andere Dinge ausprobieren, z. B. den Anschluss eines allgemeineren Admin-Panel-Hooks und die Überprüfung des Werts $ _GET ['action'] von 'editattachment'.

eddiemoya
quelle
2

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

In functions.phpdem Thema (das Erstellen eines Plugins würde auch funktionieren) habe ich den 'add_attachment'Hook verwendet, um basierend auf jeder neu hochgeladenen Datei einen neuen Beitrag (benutzerdefinierter Beitragstyp 'talk') zu erstellen. Natürlich könnte das Beispiel ein bisschen Aufhellen vertragen, 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');
Calle
quelle