Cod pentru încărcare personalizată atașamente. Aproape gata!

23 nov. 2010, 19:36:51
Vizualizări: 656
Voturi: 4

Codul de mai jos se află în functions.php al temei mele și creează o pictogramă personalizată de încărcare deasupra editorului de conținut WordPress, lângă pictograma standard de încărcare.

Imaginile încărcate prin această pictogramă primesc un flag special în wp_postmeta numit _imageTop pentru a le diferenția de imaginile atașate standard (pentru a-mi permite să fac lucruri speciale cu ele ca o colecție separată de imagini "atașate").

Am 3 probleme care apar și sunt sigur că au soluții simple.

1) Filtru attachment_fields_to_save nu se aplică, chiar dacă văd textul afișat în fereastra media-upload.php. Știu asta pentru că meta _imageTop este scris în baza de date doar când comentez verificarea if(isset)

2) După ce imaginile au fost încărcate, trebuie să dau click pe "Salvează toate modificările" pentru ca meta _imageTop să fie salvat în baza de date. Ideal, aș dori ca datele să fie salvate imediat după încărcare, fără să fie nevoie să dau click pe "Salvează toate modificările". Probabil se întâmplă asta pentru că handler-ul attachment_fields_to_save se declanșează doar la hook-ul "Salvează toate modificările". Totuși, aș dori să aflu cum să-l fac să se declanșeze când imaginile au fost încărcate.

3) Vreau să elimin linkul "inserează în postare" din ecran.

//Încărcare imagini personalizate
function my_customImages($initcontext)
{
    global $post;
    ?>
<script type="text/javascript">
jQuery(document).ready(function() {
    var fileInput = '';
    jQuery('#wpe-uploadAttachments').click(function() {
        fileInput = jQuery(this).prev('input');
        formfield = jQuery('#upload_image').attr('name');
        post_id = jQuery('#post_ID').val();
        tb_show('Imaginile mele pentru produs', 'media-upload.php?post_id='+post_id+'&type=image&my_idCustomAttachment=true&TB_iframe=true');
        return false;
    });

});
</script>
    <?php
    return $initcontext. '<input type="hidden" id="post_ID" value="'. $post->ID .'" />&nbsp;&nbsp;&nbsp;Imagini produs:<a id="wpe-uploadAttachments" href="javascript:;" class="mceButton mceButtonEnabled" onmousedown="return false;" onclick="return false;" title="Click aici pentru a încărca imaginile produsului pentru această postare"><img src="'.get_bloginfo('template_directory') .'/img/upload-icon.gif"" /></a>';
}
add_filter('media_buttons_context', 'my_customImages');

function my_image_attachment_fields_to_save($post, $attachment) {
    update_post_meta($post['ID'], '_imageTop', true);
    return $post;
}

if(isset($_GET['my_idCustomAttachment'])){
    echo "Aceasta este adevărat";
    add_filter("attachment_fields_to_save", "my_image_attachment_fields_to_save", null , 2);
}
1
Comentarii

Scott, este posibil să descarci tema ta de undeva?

hakre hakre
23 nov. 2010 22:16:11
Toate răspunsurile la întrebare 1
0

1) Filtru attachment_fields_to_save nu este aplicat, chiar dacă văd textul afișat în fereastra media-upload.php. Știu asta pentru că meta _imageTop este scris în baza de date doar când comentez verificarea if(isset)

Încearcă să înlocuiești $_GET cu $_POST și vezi dacă funcționează. Dacă da, trebuie să verifici și $_POST.

2) După ce imaginile au fost încărcate, trebuie să fac clic pe "Salvează toate modificările" pentru a salva meta _imageTop în baza de date. În mod ideal, aș dori ca datele să fie salvate imediat după încărcare, fără a fi nevoie să fac clic pe "Salvează toate modificările". Probabil se întâmplă asta pentru că attachment_fields_to_save handler este declanșat doar la hook-ul "Salvează toate modificările". Totuși, aș dori să aflu cum să-l fac să se declanșeze când imaginile au fost încărcate.

Dacă nu se declanșează, singura soluție este să-l declanșezi manual, de exemplu apelând direct funcția hook. Dacă nu este posibil (de exemplu, nu ai cod care să fie executat pentru a putea rula codul suplimentar), atunci trebuie să cauți un alt action în care să te poți înregistra, de exemplu unul care se declanșează după încărcare. Probabil există un hook când imaginea este salvată în biblioteca media. Ai putea salva și câmpul personalizat al postării în baza de date. Doar pentru a-l avea salvat. Nu știu dacă WP poate gestiona asta cu sistemul său de revizii, așa că va trebui să încerci.

3) Vreau să elimin link-ul "inserare în postare" din ecran.

Nu știu cum se poate face asta din cap, ar trebui să verifici codul sursă pentru a vedea dacă există ceva pe care îl poți suprascrie cu un hook.

25 nov. 2010 00:08:53