Salvataggio Media - Quale Hook Viene Attivato?

30 mag 2012, 16:15:38
Visualizzazioni: 15.8K
Voti: 8

Ciao,

Sto cercando di eseguire del codice che verrà attivato quando salvo un'immagine nella libreria media. Come di consueto, seleziono il file, lo carico, inserisco i metadati e poi clicco su salva. A questo punto vorrei agganciarmi a WordPress e reindirizzare l'utente a un altro URL. In questo modo, invece di mostrare all'utente la lista dei media caricati, posso portarlo direttamente a uno strumento di manipolazione delle immagini.

Ho trovato un filtro che si attiva appena prima della creazione dei metadati, ma nulla per quando il file viene salvato?

Grazie,

2
Commenti

Prova a utilizzare il Hikari Hooks Troubleshooter. Mi ha aiutato a esporre l'hook di cui avevo bisogno per un'azione personalizzata.

cpilko cpilko
30 mag 2012 18:23:18

Richard, sei sicuro che nessuna delle risposte fornite alle tue domande sia corretta? Per favore controlla le FAQ, in particolare la sezione "Come faccio a porre domande qui?"...

brasofilo brasofilo
29 giu 2012 08:12:32
Tutte le risposte alla domanda 3
0

Attualmente non ci sono hook attivati dopo il caricamento di file multimediali, almeno per quanto ne so. Il problema con gli hook disponibili durante il processo di caricamento e salvataggio di file e dati multimediali è che sono limitati a una sola parte del processo, quindi utilizzarne uno non è affidabile. Ad esempio, add_attachment viene attivato dopo che un nuovo file ha completato il processo di caricamento prima di modificare i metadati del file, e se intendi reindirizzare l'utente a questo punto, interromperà il processo di caricamento per i file successivi se abbiamo più di un file da caricare. Tuttavia, potrebbe essere adatto per altri tipi di azioni.

Per il tuo caso specifico, puoi agganciarti all'hook di azione admin_init e verificare se ci troviamo nella schermata della libreria multimediale dopo aver caricato o modificato un file. Lo sappiamo salvando il numero di allegati prima del caricamento e confrontandolo con il numero di allegati dopo il caricamento:

add_action('admin_init', 'redirect_after_media_save');
function redirect_after_media_save() {

    global $pagenow;

    // quando visitiamo la schermata di caricamento, salviamo il numero di allegati
    if ( $pagenow == 'media-new.php' ) {
        $attachments_before = array_sum((array)wp_count_attachments());
        update_option('count_attach_before', $attachments_before);
    }

    if ( $pagenow == 'upload.php' ) { // siamo nella pagina della libreria multimediale

        // otteniamo il conteggio degli allegati prima e dopo il caricamento
        $attachments_before = get_option('count_attach_before');
        $attachments_after = array_sum((array)wp_count_attachments());

        if ( 
            // ci sono nuovi file caricati
            ( wp_get_referer() == admin_url('media-new.php') && $attachments_after > $attachments_before )
            ||
            // o abbiamo appena modificato un file multimediale
            isset($_GET['posted'])
        ) {
                // reindirizziamo alla posizione desiderata
                wp_redirect(admin_url());
                exit;
        }
    }
}

Questo codice reindirizzerà l'utente alla dashboard dopo il caricamento o la modifica riusciti di un file multimediale. Puoi modificarlo per adattarlo alle tue esigenze. Potresti anche voler scegliere un hook di amministrazione diverso da admin_init se desideri eseguire attività diverse dal reindirizzamento.

19 nov 2012 01:46:01
0

Forse una risposta un po' tardiva, ma ho avuto uno scenario simile e volevo condividere la soluzione.

Nel file functions.php del tema (creare un plugin avrebbe funzionato altrettanto bene), ho usato l'hook 'add_attachment' per creare un nuovo post (custom post type 'talk') basato su ogni nuovo file caricato. Certo, l'esempio potrebbe essere migliorato, ma questo ha funzionato per analizzare ogni allegato multimediale che veniva caricato.

<?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)
    {
        // Crea un nuovo custom post object solo per file audio
        $my_post = array(
          'post_title'    => $attachment_post->post_title,
          'post_content'  => $attachment_post->post_content,
          'post_type'   => 'talk',
          'post_author'   => $current_user->ID
        );

        // Inserisce il custom post nel 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 lug 2014 23:25:17
0

Sembra che non ci sia un'azione al salvataggio dei media, ma c'è un filtro. Sfortunatamente, ciò significa che puoi fare alcune cose, ma non puoi effettivamente visualizzare alcun output altrimenti interromperai il filtro.

add_filter('attachment_fields_to_save', 'attachment_stuff');
function attachment_stuff($stuff){

    //Fai qualcosa qui, ma non visualizzare alcun output altrimenti interromperai il filtro.

    return $stuff;
}

$stuff è in realtà un array di campi utilizzati dalla pagina degli elementi multimediali. Potresti provare altre soluzioni come agganciarti a un hook più generico del pannello di amministrazione e controllare il valore $_GET['action'] di 'editattachment'.

27 giu 2012 02:24:53