设置特定表单上载文件字段的特定图像大小

时间:2016-03-01 作者:Ben

当您通过表单的“上载文件”字段类型将图像上载到Wordpress媒体库时,默认情况下,Wordpress会自动生成三个不同大小的副本。

现在我知道如何在全球范围内调整这些尺寸。

My Question Is:

是否可以为特定字段设置不同的大小?

For Example:

我有一个带有两个“上传文件”字段的表单。当用户上传第一个字段的图像时,我希望wordpress只生成一个“中等”大小(或最大300*300)的图像。

当他上传第二个字段的图像时,我希望wordpress只生成一个“大”尺寸(或最大640*640)的图像。

有什么想法吗?谢谢

1 个回复
最合适的回答,由SO网友:Adam 整理而成

下面是一个如何取消设置标准WordPress大小或任何大小的示例,假设您知道图像大小名称,当然您可以简单地输入$sizes 数组以确定要取消设置的内容。。。

function wpse219360_disable_intermediate_image_sizes($sizes) {  

    if ( isset($_FILES[\'file_input_1\']) && $_FILES[\'file_input_1\'][\'error\'] != UPLOAD_ERR_NO_FILE ) {
        unset($sizes[\'thumbnail\']);  
        unset($sizes[\'medium\']);  
        unset($sizes[\'large\']);  
    }

}  

add_filter(\'intermediate_image_sizes_advanced\', \'wpse219360_disable_intermediate_image_sizes\' );  
因此,假设您正在从自定义表单上载文件,并且假设您没有将图像附加到您想要调用的帖子media_handle_upload() 对于逻辑中的每个表单字段。

您的表单处理逻辑可能如下所示。。。

foreach(array(\'custom_file_1\', \'custom_file_2\') as $input_name) {

    switch ($input_name) {

        case \'custom_file_1\':

            add_filter(\'intermediate_image_sizes_advanced\', function($sizes) {
                return array(\'medium\');
            });

            break;

        case \'custom_file_2\':

            add_filter(\'intermediate_image_sizes_advanced\', function($sizes) {
                return array(\'large\');
            });

            break;

    }


    /**
     * Pass the $input_name to media_handle_upload() which internally takes 
     * the given $input_name and looks for the corresponding value on the 
     * $_FILES superglobal...
     *
     * Pass 0 as the second parameter if you are not attaching the upload to
     * a given post, if you are attaching it to a post, then you must pass the
     * post\'s ID in which you want to attach the image too
     */
    $result = media_handle_upload($input_name, 0);

}
上面的示例假设您已经拥有表单数据的句柄。

在您希望上载文件的时候,我们会迭代一组我们希望从表单中得到的前缀输入名称,在本例中,我使用的是输入名称custom_file_1custom_file_2...

这些将对应于您的表单HTML,例如:

<input type="file" name="custom_file_1"/>
<input type="file" name="custom_file_2"/>
注1foreach 循环可以得到改进,变得更简单,但是对于这个例子,我把它放得更详细,希望它能更好地解释内部发生的事情。

所以为了保持干燥。。。

$inputs = array(
    \'custom_file_1\' => \'medium\',
    \'custom_file_2\' => \'large\',
);

foreach($inputs as $name => $size) {

    add_filter(\'intermediate_image_sizes_advanced\', function($sizes) {
        return array($inputs[$name]);
    });

    $result = media_handle_upload($name, 0);

}
请注意,您可能需要将原始图像大小重新挂接到intermediate_image_sizes_advanced 过滤器位于foreach 循环以确保任何后续调用media_handle_upload() 在来自您和/或其他地方的同一请求中,不会修改其预期生成的图像大小。

相关推荐

Forms cut off when on mobile

信用卡处理器生成的表单通过javascript加载。正常加载时,可以看到模板工作良好here, 但是移动用户看到下面的内容,无法滚动。据说表单有一个移动版本,但显然无法加载?使用以下方法将表单加载到页面上:<div id=\"bbox-root\"></div> <script type=\"text/javascript\"> window.bboxInit = function () { bbox.show