Thickbox hacking - removendo campos

4

Padrão (grande e feio) Thickbox

Eu não gosto de como essa página do Thickbox é vista, eu quase nunca uso todos esses campos de configurações então decidi me livrar deles, pelo menos nas páginas onde eu estou enviando imagens como opções de tema.

UmThickbox(muito)simples

Usando attachment_fields_to_edit & Filtros media_upload_tabs Eu fiz parecer muito mais simples:

Sevocêestáseperguntandocomofazerisso(essesfiltros/ganchossãomalexplicados),aquiestáocódigo:

functionthickbox_fields($form_fields,$post){unset($form_fields['post_title'],//disables"Title" field and so forth...
       $form_fields['url'] );
       $form_fields['image_alt'], 
       $form_fields['post_excerpt'], 
       $form_fields['post_content'], 
       $form_fields['align'], 
       $form_fields['image-size'], 
    );

    return $form_fields;
}

function thickbox_upload_init(){
    add_filter('attachment_fields_to_edit', 'thickbox_fields', 10, 2);
}

add_action('admin_init', 'thickbox_upload_init');

O problema

Infelizmente, depois de excluir campos de tamanho de imagem e de URL, não sei como substituir seus valores pelo conteúdo desejado (neste caso, o URL e o tamanho da imagem definidos como "completo", sempre).

Estou carregando coisas com base em este tutorial simples mas poderoso usando este código na página de administração:

jQuery(document).ready(function() {

jQuery('#upload_image_button').click(function() {
 formfield = jQuery('#upload_image').attr('name');
 tb_show('', 'media-upload.php?type=image&TB_iframe=true');
 return false;
});

window.send_to_editor = function(html) {
 imgurl = jQuery('img',html).attr('src'); //imgurl is always empty after deleting url field
 jQuery('#upload_image').val(imgurl);
 tb_remove();
}

});

E como o comentário afirma imgurl = jQuery('img',html).attr('src') é apenas vazio, além disso, quando desativo apenas o tamanho da imagem e deixo o URL sozinho - seu tamanho é sempre definido como "médio", alguma idéia de como corrigir isso?

Eu estava tentando passar URL e tamanho de imagem assim:

 function thickbox_fields($form_fields, $post){
        unset(
           $form_fields['post_title'], //disables "Title" field and so forth...
           $form_fields['url'] );
           $form_fields['image_alt'], 
           $form_fields['post_excerpt'], 
           $form_fields['post_content'], 
           $form_fields['align'], 
           $form_fields['image-size'], 
        );

        $form_fields['url'] = 'not sure how to get the url here, but this doesnt work anyways';
        $form_fields['image-size'] = 'full'; //yup, this also doesn't work at all

        return $form_fields;
    }

Eu sei que esses campos são matrizes, mas $form_fields['image-size'] = array('size' => 'full') também não funciona.

Alguma dica?

TL; DR - como ocultar os campos url e image-size do Thickbox e depois enviar o valor do campo url ao front-end? Além disso, como forçar o Thickbox a fazer o upload de arquivos como "cheio", porque com o tamanho da imagem não definido, ele retorna links para envios de tamanho médio o tempo todo.

Acho que o filtro image_size_input_fields pode ser útil.

    
por Wordpressor 18.02.2012 / 17:22

1 resposta

4

Difícil, mas depois de entender como o WordPress define os tamanhos e os campos, o resto é fácil:

function thickbox_fields($form_fields, $post){
    unset(
        $form_fields['post_title'], //disables "Title" field and so forth...
        $form_fields['url'],
        $form_fields['image_alt'], 
        $form_fields['post_excerpt'], 
        $form_fields['post_content'], 
        $form_fields['align'], 
        $form_fields['image-size']
    );

    //create the size input for full only and set display to none
    $size = 'full';
    $css_id = "image-size-{$size}-{$post->ID}";
    $html = "<div style='display: none;' class='image-size-item'><input type='radio' name='attachments[$post->ID][image-size]' id='{$css_id}' value='{$size}'checked='checked' /></div>";
    //set as image-size field
    $form_fields['image-size'] = array(
        'label' => '', //leave with no label
        'input' => 'html', //input type is html
        'html' => $html //the actual html
    ); 

    return $form_fields;
}

Primeiro você remove todos os campos indesejados, então você imita a maneira como o WordPress cria o campo tamanhos, mas somente com a opção completa, e oculta isso usando display:none

e, em seguida, você adiciona-o à matriz de campos na forma como o WordPress Aceita e como você pode ver, não é apenas uma string simples, mas uma matriz de parâmetros (label, input, html)

Agora, para a verdadeira questão: quem é a garota na imagem?

    
por Bainternet 18.02.2012 / 19:44