响应图像-从主题定制器控件上传生成多个图像?

时间:2013-04-28 作者:Brian

因此,在代码中四处搜索后,它看起来像过滤器image_make_intermediate_size 不是由各种WP_Customize_Control() 课程位于WP_Customize_Image_Control() 或者是父母WP_Customize_Upload_Control().

我正在寻找自动生成各种大小的图像,以便响应图像服务,我需要执行image_make_intermediate_size() 具有特定于扩展自定义控件的某些自定义大小的函数。只是不知道如何确保上传的图像调用此功能,主要是因为我无法跟踪WP_Customize_Control() 从通常执行函数的默认上载行为中“取消挂钩”。

请注意,它的工作方式显然是最好的选择,我不希望通过主题定制器上传的每个图像都自动生成所有默认图像大小,但对于我的用例,我更喜欢使用本机功能,只需将一些唯一的大小参数传递给image_make_intermediate_size().

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

如果有人有更好的解决方案,我愿意接受,然而,我的想法似乎很好。

基本上,下面的代码只是等待图像完成上传,然后挂接到add_attachment 行动添加第一个后,我们将通过post ID(用于图像附件)连接并生成新图像,这是add_attachment 行动

首先,我们通过按ID调用post来获取图像,然后一点regex保存各种文件路径、文件名和其他数据位。请注意,我正在递归地添加3个不同大小的图像,所以如果您只想创建1个或多个不同大小的图像,请进行更改。我还将我的主题命名为$_POST 数据,从各种图像上传操作的数据来看,这似乎是设置主题定制器内部条件的最具体方法。没有太多其他的事情要做,但是使用图像编辑器的其他领域没有一个包括$_POST[\'post_data\'][\'theme\'], 因此,只需将其替换为主题名称或使用property_exists 如果希望它应用于所有主题,并且仅应用于自定义程序。

add_filter(\'add_attachment\',\'generate_responsive_sizes\');

function generate_responsive_sizes( $attachment_id ) {

    $image_data = get_post( $attachment_id );

    // quit if the post_type is not attachment and mime_type is not jpeg/jpg/gif
    if ( $image_data->post_type != \'attachment\' || $image_data->post_mime_type != ( \'image/jpeg\' || \'image/png\' || \'image/gif\' ) )
        return false;

    // quit if the theme is not pure - only PURE gets responsive images, add new themes with responsive images  here
    if ( $_POST[\'post_data\'][\'theme\'] != \'pure\' )
        return false;

    $file = substr( strrchr( $image_data->guid, \'/\' ), 1 );
    $filepath = str_replace( $file, \'\', $image_data->guid );
    $file_arr = preg_split( \'/\\./\', $file );
    $filename = $file_arr[0];
    $file_ext = $file_arr[1];
    $upload_dir = wp_upload_dir();

    $sizes = array(
            \'1024\' => array(
                    \'width\' => 1024,
                    \'height\' => 768,
                    \'crop\' => true,
                ),
            \'1680\' => array(
                    \'width\' => 1680,
                    \'height\' => 1050,
                    \'crop\' => true,
                ),
            \'2560\' => array(
                    \'width\' => 2560,
                    \'height\' => 1440,
                    \'crop\' => true,
                ),
        );

    if ( ! is_wp_error( $image ) ) {
        foreach ($sizes as $key => $value) {
            $image = wp_get_image_editor( $image_data->guid );
            $dimensions = $image->get_size();
            if ( $dimensions[\'width\'] < $value[\'width\'] && $dimensions[\'height\'] < $value[\'height\'] ) {
                continue;
            }
            $image->resize( $value[\'width\'], $value[\'height\'], $value[\'crop\'] );
            if ( $dimensions[\'width\'] < $value[\'width\'] ) {
                $value[\'width\'] = $dimensions[\'width\'];
            }
            $image->save( $upload_dir[\'path\'] . \'/\' . $filename . \'-\' . $value[\'width\'] . \'x\' . $value[\'height\'] . \'.\' . $file_ext );
        }
    }

}

结束

相关推荐

Front-End Post Submission

我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。