强制媒体上传者使用自定义图像大小的方法

时间:2013-03-01 作者:micadelli

我已经实现了媒体上传到我的自定义类别图像插件,我想知道我是否可以强制它使用我只为类别设置的自定义图像大小。

enter image description here

。。。所以在上面的屏幕截图中,我希望大小列只包含“类别图像(80 x 80)”并自动选择。

我在列表中添加“类别图像”的方式如下所示

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 );  
}
如果在该函数中,我只返回$custom_sizes 它将影响每个媒体上传程序的上下文,例如帖子->添加媒体,而不仅仅是在设置我的分类图像时。

下面是我如何在插件中实现媒体上传器

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;
}
有没有办法做到这一点?谢谢

如果有人知道更好的方法来实现媒体上传器,请让我知道。现在,它以某种方式使用了旧的媒体上传器窗口,而与POST->Add media中的窗口不同。

1 个回复
SO网友:jaysauce

呼叫时add_filter( \'image_size_names_choose\', \'custom_image_sizes_choose\' ); 运用你的调查技巧,看看打电话给if(thisweretrue) add_filter( \'image_size_names_choose\', \'custom_image_sizes_choose\' ); 因为我不知道你的具体情况。

实际上,我可以使用您的解决方案来设置自定义尺寸,以满足我的需要。在我的场景中,我创建了一个自定义元框,在该自定义元框中,我有一个javascript onclick块,该块块将被调用,如下所示uploadimg_pt(\'mymetaboxfieldname\');. 我用于从媒体库获取图像的Javascript如下所示:

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;
}
使用此javascript时,它会在一个灯箱中打开媒体管理器,生成iframe。然后,它在函数调用的参数中采用该pid,并在生成iframe时将其放入URL中。在生成的iframe中,它还将调用模板中的函数文件。所以我在函数文件中设置了一个if语句,如下所示:

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;  
}
因为我只需要那件大号的,所以我就退回了那件。

我不知道你的具体情况,但我希望这能帮助你弄清楚自己需要什么。

结束