下面是一个如何取消设置标准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_1
和custom_file_2
...
这些将对应于您的表单HTML,例如:
<input type="file" name="custom_file_1"/>
<input type="file" name="custom_file_2"/>
注1
foreach
循环可以得到改进,变得更简单,但是对于这个例子,我把它放得更详细,希望它能更好地解释内部发生的事情。
所以为了保持干燥。。。
$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()
在来自您和/或其他地方的同一请求中,不会修改其预期生成的图像大小。