Salvare Media - Care Hook Se Declanșează?

30 mai 2012, 16:15:38
Vizualizări: 15.8K
Voturi: 8

Salutare,

Încerc să declanșez un cod care să se execute când salvez o imagine în biblioteca media. Ca de obicei, selectez fișierul, îl încarc, completez metadatele și apoi fac clic pe salvare. În acest moment, vreau să mă conectez la WordPress și să redirecționez utilizatorul către o altă URL. Astfel, în loc să fie direcționat către o listă cu media încărcată, pot să îl redirecționez către un instrument de manipulare a imaginilor.

Am găsit un filtru care se declanșează chiar înainte de crearea metadatelor, dar nimic pentru momentul în care fișierul este salvat?

Mulțumesc,

2
Comentarii

Încearcă să folosești Hikari Hooks Troubleshooter. M-a ajutat să expun hook-ul de care aveam nevoie pentru o acțiune personalizată.

cpilko cpilko
30 mai 2012 18:23:18

Richard, ești sigur că niciunul dintre răspunsurile oferite la întrebările tale nu este corect? Te rog verifică secțiunea de Întrebări Frecvente, în special secțiunea "Cum să pun întrebări aici?"...

brasofilo brasofilo
29 iun. 2012 08:12:32
Toate răspunsurile la întrebare 3
0

De fapt, nu există niciun hook declanșat după încărcarea fișierelor media, cel puțin din câte știu. Problema cu hook-urile disponibile pe parcursul încărcării și salvării fișierelor și datelor media este că sunt limitate la o singură porțiune a procesului, așa că utilizarea oricăruia dintre ele nu este fiabilă. De exemplu, add_attachment este declanșat după ce un nou fișier a finalizat procesul de încărcare, înainte de editarea metadatelor fișierului, iar dacă intenționați să redirecționați utilizatorul în acest moment, va întrerupe procesul de încărcare pentru fișierele ulterioare dacă avem mai multe fișiere încărcate. Totuși, ar putea fi potrivit pentru alte tipuri de acțiuni.

Pentru cazul tău specific, poți folosi hook-ul de acțiune admin_init și să verifici dacă suntem pe ecranul bibliotecii media după ce am încărcat sau am editat un fișier. Știm asta prin salvarea numărului de atașamente înainte de încărcare și comparându-l cu numărul de atașamente după încărcare:

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

    global $pagenow;

    // când vizităm ecranul de încărcare, salvăm numărul de atașamente
    if ( $pagenow == 'media-new.php' ) {
        $attachments_before = array_sum((array)wp_count_attachments());
        update_option('count_attach_before', $attachments_before);
    }

    if ( $pagenow == 'upload.php' ) { // suntem pe pagina bibliotecii media

        // obținem numărul de atașamente înainte și după încărcare
        $attachments_before = get_option('count_attach_before');
        $attachments_after = array_sum((array)wp_count_attachments());

        if ( 
            // există fișiere noi încărcate
            ( wp_get_referer() == admin_url('media-new.php') && $attachments_after > $attachments_before )
            ||
            // sau tocmai am editat un fișier media
            isset($_GET['posted'])
        ) {
                // redirecționăm către locația dorită
                wp_redirect(admin_url());
                exit;
        }
    }
}

Acest cod va redirecționa utilizatorul către panoul de control după încărcarea sau editarea cu succes a unui fișier media. Poți ajusta codul pentru a se potrivi nevoilor tale. De asemenea, poți alege un alt hook admin decât admin_init dacă dorești să efectuezi alte sarcini în afară de redirecționare.

19 nov. 2012 01:46:01
0

Poate un răspuns puțin întârziat, dar am avut un scenariu similar și am vrut să împărtășesc soluția.

În functions.php al temei (crearea unui plugin ar funcționa de asemenea), am folosit hook-ul 'add_attachment' pentru a crea un nou post (tipul de post personalizat 'talk') bazat pe fiecare fișier nou încărcat. Desigur, exemplul ar putea fi îmbunătățit, dar acest lucru a funcționat pentru analizarea fiecărei atașări media încărcate.

<?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)
    {
        // Creează un nou obiect de post personalizat doar pentru fișiere audio
        $my_post = array(
          'post_title'    => $attachment_post->post_title,
          'post_content'  => $attachment_post->post_content,
          'post_type'   => 'talk',
          'post_author'   => $current_user->ID
        );

        // Inserează postul personalizat în baza de date
        $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 iul. 2014 23:25:17
0

Se pare că nu există o acțiune la salvarea media, dar există un filtru. Din păcate, asta înseamnă că poți face unele lucruri, dar nu poți afișa nimic sau vei întrerupe filtrul.

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

    //Poți face operații aici, dar nu afișa nimic sau vei întrerupe filtrul.

    return $stuff;
}

$stuff este de fapt un array de câmpuri utilizate de pagina elementului media. Ai putea încerca alte metode, cum ar fi conectarea la un cârlig mai general al panoului de administrare și verificarea valorii $_GET['action'] pentru 'editattachment'.

27 iun. 2012 02:24:53