web-dev-qa-db-fra.com

Thickbox hacking - suppression de champs

Thickbox (gros et moche) par défaut

Je n'aime pas l'aspect de la page de cette Thickbox, je n'utilise presque jamais tous ces champs de paramètres. J'ai donc décidé de les supprimer, du moins sur les pages où je télécharge des images comme options de thème. enter image description here

Une Thickbox (très) simple

Utilisation de attachment_fields_to_edit & media_upload_tabs filters Je l’ai simplifié: enter image description here

Si vous vous demandez comment faire cela (ces filtres/hooks sont mal expliqués), voici le code:

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'], 
    );

    return $form_fields;
}

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

add_action('admin_init', 'thickbox_upload_init');

Le problème

Malheureusement, après avoir supprimé les champs de taille d'image et d'URL, je ne sais pas comment écraser ses valeurs avec le contenu souhaité (dans ce cas, l'URL et la taille de l'image sont définies sur "complet", toujours).

Je télécharge des choses basées sur ce tutoriel simple mais puissant en utilisant ce code sur la page d'administration:

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();
}

});

Et comme le commentaire l'indique, imgurl = jQuery('img',html).attr('src') est simplement vide. De plus, lorsque je désactive uniquement la taille de l'image et que je laisse l'URL seule - sa taille est toujours définie sur "moyenne", des idées pour résoudre ce problème?

J'essayais de transmettre l'URL et la taille de l'image comme ceci:

 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;
    }

Je sais que ces champs sont des tableaux, mais $form_fields['image-size'] = array('size' => 'full') ne fonctionne pas non plus.

Des allusions?

TL; DR- comment masquer les champs de taille d'image et d'image de Thickbox, puis envoyer la valeur du champ d'URL au serveur frontal? En outre, comment forcer Thickbox à envoyer des fichiers "complets", car avec une taille d'image non définie, elle renvoie tout le temps des liens vers des téléchargements de taille moyenne.

Je suppose que le filtre image_size_input_fields pourrait être utile.

4
Wordpressor

Difficile, mais une fois que vous avez compris comment WordPress définit les tailles et les champs, le reste est simple:

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;
}

Tout d’abord, vous supprimez tous les champs non désirés, puis vous imitez la manière dont WordPress crée le champ de tailles, mais uniquement avec l'option sélectionnée (pleine) et vous la masquez à l'aide de display:none.

et ensuite vous l'ajoutez au tableau de champs de la manière acceptée par WordPress et comme vous pouvez le voir, il ne s'agit pas simplement d'une chaîne, mais d'un tableau de paramètres (libellé, entrée, HTML).

Maintenant pour la vraie question: qui est la fille dans l'image ???

4
Bainternet