web-dev-qa-db-fra.com

Manière de forcer le téléchargeur de média à utiliser une taille d'image personnalisée

J'ai implémenté l'utilitaire de téléchargement de média dans mon plugin d'image de catégorie personnalisée et je me demandais si je pouvais le forcer en quelque sorte à utiliser la taille d'image personnalisée que j'ai définie uniquement pour les catégories.

enter image description here

... Ainsi, dans la capture d'écran ci-dessus, j'aimerais que la colonne Taille contienne uniquement "Image de catégorie (80 x 80)" et soit automatiquement sélectionnée.

La façon dont j'ai ajouté que "Image de catégorie" à la liste est présentée ci-dessous

add_filter( 'image_size_names_choose', 'custom_image_sizes_choose' );

function custom_image_sizes_choose( $sizes ) {  
    $custom_sizes = array(  
        'category-image' => 'Category Image'  
    );
    return array_merge( $sizes, $custom_sizes );  
}

Si dans cette fonction, je ne retourne que $custom_sizes, cela affectera tous les contextes de téléchargement de média, par exemple. Messages-> Ajouter un média, et pas seulement lors de la configuration de mon image de catégorie.

Voici comment j'ai implémenté Media Uploader dans mon plugin

add_action( 'admin_init', 'cat_image_options_setup' );

//------------------------------------------------
// Setup category image media picker
//------------------------------------------------
function cat_image_options_setup() {
    global $pagenow;
    if ( 'media-upload.php' == $pagenow || 'async-upload.php' == $pagenow ) {
        // Now we'll replace the 'Insert into Post Button inside Thickbox' 
        add_filter( 'gettext', 'replace_thickbox_text' , 1, 2 );
    }
}

//------------------------------------------------
// Replace the media picker button text
//------------------------------------------------
function replace_thickbox_text( $translated_text, $text ) { 
    if ( 'Insert into Post' == $text ) {
        $referer = strpos( wp_get_referer(), 'cat_image_settings' );
        if ( $referer != '' ) {
            return __( 'Add as a category image', 'ddr' );
        }
    }

    return $translated_text;
}

Un moyen d'y parvenir? Merci!

PS Si quelqu'un connaît un meilleur moyen d'implémenter cet outil de téléchargement de média, faites-le moi savoir. Maintenant, il utilise en quelque sorte l'ancienne fenêtre de téléchargement de média, et pas la même chose que dans Posts-> Add Media.

4
micadelli

Lorsque vous appelez add_filter( 'image_size_names_choose', 'custom_image_sizes_choose' );, utilisez vos compétences en matière d’enquête pour voir comment il serait préférable d’appeler un if(thisweretrue) add_filter( 'image_size_names_choose', 'custom_image_sizes_choose' ); puisque je ne sais pas exactement quelle est votre situation particulière.

En fait, j'ai pu utiliser votre solution pour configurer les tailles personnalisées afin de vous aider avec ce dont j'avais besoin. Dans mon scénario, j'ai créé une méta-boîte personnalisée et, dans cette métabox personnalisée, un élément javascript est appelé javascript appelé, qui se présente comme suit uploadimg_pt('mymetaboxfieldname');. Le code Javascript que j'ai utilisé pour obtenir l'image de la médiathèque est le suivant:

function uploadimg_pt(pid) {
    window.send_to_editor = function(html) {
        imgurl = jQuery('img',html).attr('src');
        jQuery('#'+pid).val(imgurl);
        tb_remove();
    }
    formfield = jQuery('#'+pid).attr('name');
    tb_show('', 'media-upload.php?type=image&pid='+pid+'&TB_iframe=true');
    return false;
}

Lors de l'utilisation de ce javascript, le gestionnaire de médias s'ouvre dans une lightbox générant un iframe. Il prend ensuite ce pid dans l'argument de l'appel de fonction et le place dans l'URL lors de la génération de cette iframe. Dans cette iframe qui est générée, elle appellera également le fichier de fonctions du modèle. Donc ce que j'ai fait était de définir une instruction if dans mon fichier de fonctions comme ceci:

if($_GET['pid'] == "mymetaboxfieldname"){
    add_filter( 'image_size_names_choose', 'custom_image_size_large' );
}
function custom_image_size_large( $sizes ) {
    $custom_sizes = array(  
        'large' => 'Large'  
    );
    return $custom_sizes;  
}

Comme je n'avais besoin que de la grande taille, c'est celle que je suis revenue.

Je ne connais pas votre scénario exact, mais j’espère que cela vous aidera à déterminer ce dont vous avez besoin chez vous.

1
jaysauce