Support » Fixing WordPress » Cache control headers for resized images

  • I have a function that resizes images on the fly in WordPress. I also have W3 Total Cache set up to add cache control to all my images, but the ones being resized by the function are served as private with no cache control.

    The function looks like this:

    public static function resize( $path, $max_width = null, $max_height = null, $crop = true, $args = '') {
        // determine base path for uploads
        $upload_dir = wp_upload_dir();
        // let's specify some common defaults
        $defaults = array(
            'quality' => 100,
            'suffix' => null,
            'uploads_url' => $upload_dir['baseurl'],
            'uploads_directory' => $upload_dir['basedir'],
            'crops_directory' => '/wpx/',
            'filetype' => null
        // standard WP default arguments merge
        $parameters = wp_parse_args( $args, $defaults );
        extract( $parameters, EXTR_SKIP );
        // get the path
        $system_root = $_SERVER[ 'DOCUMENT_ROOT' ];
        $file_path = parse_url($path);
        $image = wp_get_image_editor($system_root.$file_path['path']);
        // only do stuff on success
        if ( ! is_wp_error( $image ) ) {
            // resize the image
            if ($max_width || $max_height) { $image->resize( $max_width, $max_height, $crop ); }
            // set the quality
            if ($parameters['quality']) $image->set_quality( $parameters['quality'] );
            // rotate the image
            if ($parameters['rotate']) $image->rotate( $parameters['rotate'] );
            // flip the image
            if ($parameters['flip']) $image->flip( true, false );
            // crop the image
            if ($parameters['crop']) $image->crop( $parameters['crop'] );
            // generate the filename
            $filename = $image->generate_filename($parameters['suffix'], $parameters['uploads_directory'].$parameters['crops_directory'], $parameters['filetype'] );
            // save the image
            $image_meta = $image->save($filename);
            // insert the URL path to the crop
            $image_meta['url'] = $parameters['uploads_url'].$parameters['crops_directory'].$image_meta['file'];
            // return the data
            return $image_meta;

    The website in question is If you do a PageSpeedTest, you’ll see it complains “Specify a cache validator” for all the images in the /wpx/ folder, which is where this function saves them.

    What am I doing wrong??

  • The topic ‘Cache control headers for resized images’ is closed to new replies.