WP Super Cache 1.6.3

WP Super Cache is a full page caching plugin for WordPress. When a page is cached almost all of WordPress is skipped and the page is sent to the browser with the minimum amount of code executed. This makes the page load much faster.

1.6.3 is the latest release and is mostly a bugfix release but it also adds some new features.

  • Added cookie helper functions (#580)
  • Added plugin helper functions (#574)
  • Added actions to modify cookie and plugin lists. (#582)
  • Really disable garbage collection when timeout = 0 (#571)
  • Added warnings about DISABLE_WP_CRON (#575)
  • Don’t clean expired cache files after preload if garbage collection is disabled (#572)
  • On preload, if deleting a post don’t delete the sub directories if it’s the homepage. (#573)
  • Fix generation of semaphores when using WP CLI (#576)
  • Fix deleting from the admin bar (#578)
  • Avoid a strpos() warning. (#579)
  • Improve deleting of cache in edit/delete/publish actions (#577)
  • Fixes to headers code (#496)

This release makes it much easier for plugin developers to interact with WP Super Cache. In the past a file had to be placed in the “WP Super Cache plugins directory” so that it would be loaded correctly but in this release I’ve added new actions that will allow you to load code from other directories too.

Use the wpsc_add_plugin action to add your plugin to a list loaded by WP Super Cache. Use it like this:

do_action( 'wpsc_add_plugin', WP_PLUGIN_DIR . '/wpsc.php' )

You can give it the full path, with or without ABSPATH. Use it after “init”. It only needs to be called once, but duplicates will not be stored.

In a similar fashion, use wpsc_delete_plugin to remove a plugin.

The release also makes it much simpler to modify the cookies used by WP Super Cache to identify “known users”. This is useful to identify particular types of pages such as translated pages that should only be shown to certain users. For example, visitors who have the English cookie will be shown cached pages in English. The German cookie will fetch German cached pages. The action wpsc_add_cookie makes this possible.

do_action( 'wpsc_add_cookie', 'language' );

Execute that in your plugin and WP Super Cache will watch out for the language cookie. The plugin will use the cookie name and value in determining what cached page to display. So “language = irish” will show a different page to “language = french”.

Use wpsc_delete_cookie to remove a cookie. Cache files won’t be deleted. It’s doubtful they’d be served however because of the hashed key used to name the filenames.

do_action( 'wpsc_delete_cookie', 'language' );

If you’re going to use either of the plugin or cookie actions here I recommend using Simple Caching. While the plugin will attempt to update mod_rewrite rules, it is much simpler to have PHP serve the files. Apart from that, any plugins loaded by WP Super Cache will be completely skipped if Expert mode is enabled.

WP Super Cache and Cookie Banners

More sites use cookie banners now that the GDPR is active but some are finding that their banners are misbehaving once they enable caching.

This is a similar issue to the one that happened to some page counter plugins in the past. The page counter wouldn’t increment.

When a cookie banner is clicked a cookie is set in the browser so the website knows this visitor has agreed to accept cookies. If the cookie is set then the cookie banner html is not sent to the browser.

I suspect the main issue is that the code that sets and checks if the cookie is set is PHP. Unfortunately because the page is cached then no PHP code is executed, and the cookie banner is displayed because it was originally cached that way.

Since WP Super Cache only knows about certain WordPress cookies it assumes everyone who doesn’t have those cookies is a first time “anonymous” visitor. It doesn’t know about your cookie banner cookie.

You have two options:

  1. Rewrite your cookie banner so it’s completely in Javascript. Do the cookie detection in Javascript and also set the cookie in Javascript. If the cookie banner has been clicked then you need to trigger an action, and other Javascript that is hooked on to that trigger will run and load the tracking cookies.
  2. Modify WP Super Cache so it knows about the cookie your cookie banner uses. Caching won’t work quite as well as before as it’ll be split between visitors who have clicked the cookie banner and those that haven’t. One cached file will display the cookie banner, and the other will not but it will have ad tracking Javascript.

Using Javascript completely is a better solution because it runs in the browser on every page load but that might not be possible every time.

Otherwise, use PHP to get WP Super Cache to play nicely with your existing code:

  1. You’ll need to write a WP Super Cache plugin.
  2. You need to hook into the wp_cache_get_cookies_values cacheaction and add the value of the cookie banner cookie to the end of that string.
  3. Caching can only be performed by simple caching now, unless you’re willing to edit mod_rewrite rules in your .htaccess file.

Something like this will do. Make sure you note the warning about $wp_cache_plugins_dir in the link above about writing these plugins.

function add_cookie_banner_to_cache_cookie( $string ) {
    if ( isset( $_COOKIE['cookie_banner'] ) ) {
        $string .= 'cb,';
    }
    return $string
}
add_cacheaction( 'wp_cache_get_cookies_values', 'add_cookie_banner_to_cache_cookie' );

Substitute the name of the cookie for your cookie name, change the name of the function, and the text it adds to the string. There is an intentional PHP fatal error in the code above to discourage copy/pasting.

Your cookie banner plugin could automate setting this up, but it may have unforeseen consequences if not done correctly. It should check if $wp_cache_plugins_dir is set already, and use that location, otherwise it will have to make a directory and update the WP Super Cache configuration, where ABC is the new location for the plugins.

wp_cache_setting( 'wp_cache_plugins_dir', ABSPATH . 'wp-content/ABC' );

The new code can be copied into a file in that directory. The files in the original WP Super Cache plugins directory (found at WPCACHEHOME . 'plugins') should be copied into that directory too and a warning shown to the user. They may need to set up one of those plugins again.

The reason it is this convoluted is because this code will run before all of WordPress loads. You can’t rely on blog options or most of the nice configuration tools WordPress provides.

When your plugin is uninstalled it should of course restore the plugins directory to the way it was before.

For future reference, since cookie banners will hopefully not be around forever, here’s what they looked like in the deep, distant past of 2018. 🙂

The LA Times just gave up and don’t show anything to EU visitors.

The Supernova in the East

The latest episode of Hardcore History is another amazing audio tour through history, even if Dan Carlin himself says he is unqualified and it might not be completely accurate. He’s a great story teller. This one covers the rise of Japan in the early twentieth century and beyond.

Dan’s coverage of the Manchurian Incident reminded me I have to re-read the Tintin story, “The Blue Lotus“. Hergé definitely applied his imagination when recounting how the train track was blown up but I’d never have known about that period of time if I had never read that book.

And similarly, I wouldn’t have known the railway track was barely damaged if I hadn’t listened to Hardcore History!

My S7Edge gets the April Update

My Samsung Galaxy S7 Edge is now installing the April 1st update. It got Oreo a few months back and a few updates since. Going by Samsung’s track record I expect those updates to dry up any time soon but it’s good to see them still handing out any sort of updates.

In case you’re wondering, this is the unlocked international variant.

Version installed: G935FXXU2EREM/G935FOXA2EREM/G935FXXU2ERD6

Bohemian Rhapsody Overload

Hyped for this. Don’t be bad. Don’t be bad. Don’t mess it up.

It’s kinda odd to think of Elliot from Mr. Robot as Freddie Mercury but this trailer is promising, unless you’re going to pick holes in every little bit of it.

I enjoyed this interview with Rami Malek on The Late Show, and here’s a video produced by the band Bulsara and His Queenies called ‘A Sheer Homage’. Wow.

If you still haven’t had enough of Queen, (and who can?) the official Queen Youtube Channel has a number of 1 hour long compilations.

Finally, and this is the coolest thing ever, User cmi on the QueenZone forum has made an expanded collection of Queen albums. You’ll probably find bits and pieces there that you’ve never heard.

Maze of the Mummy & Freeze64!

Maze of the Mummy, rare “purple” Freeze64 and my regular Freeze64

Look what the postman delivered last week! I entered a competition held by Freeze64 author/publisher Vinny for C64 game Maze of the Mummy and a rare misprint of the Freeze64 fanzine and I won! You should watch the live video of Vinny picking the winner, if only to wonder at everything he has plugged into his C64 and a preview of issue 18 of Freeze64. He pronounced my name wrong too, but that’s to be expected. 🙂

I have yet to play Maze of the Mummy as it’s been a hectic few days here but I’m going to get my 1541-II down out of the attic and make a backup d64 image to play in Vice this week.

I think the last boxed C64 game I ever bought was Creatures 2 which was a long time ago so handling a physical copy of a new game sets off a mix of nostalgia for the old and eagerness to try something new. I’m looking forward to trying this game!


Bye Bye Google Backup & Sync

I’m a huge fan of Google Photos. It’s an amazing service that lets me quickly share photos with particular people, creates interesting images from my photos and it’s a convenient way to bring my photo archive with me on my phone.

Evening in Cork City

However, the new “Backup & Sync” app from Google that replaced the old uploader is problematic.

As well as uploading my photos to Google Photos it would backup to Google Drive. I don’t care about this feature because I use Backblaze for backups. I didn’t really realise what this meant when I first installed the app.

Slieve Liag

I told it to sync my “2018” folder and it dutifully started backing up to Google Photos but I soon noticed that the storage used in my Google account was decreasing. Eventually I found the computers section of Google Drive. All my files were backed up there.

It appears that “Don’t sync to this computer” doesn’t mean “don’t sync this computer to Google Drive”. However it does mean that any files deleted in the synced “Computers” section of Google Drive will be deleted locally. I found this out when I tried to save some storage space by deleting files off Google Drive. Later that day I fired up Lightroom and it reported that a large number of files were unavailable. I opened the folder in Finder only to see the images magically disappear before my eyes.

It was “Backup & Sync” deleting my local files. It was syncing deletes “to this computer”. Thankfully the files were still in the Trash so I could restore them quickly.

Cork City Hall in the fog

So, instead of wasting my storage I need to upload things manually. I see two options:

  • Drag and drop files on to a Google Photos browser window.
  • Sync one temporary folder where I copy duplicates of my photos. I need to periodically delete those files off Google Drive which won’t matter locally because they’ll be duplicates that are deleted immediately after upload.
Grand Parade under construction in 2007

It’s disappointing that Google merged the backup and sync functionality. Google Photos is not a backup service unless you pay for storage and upload full size images. For that reason I can see why they did it.

Vim: Always Learning

Vi (or Vim in it’s modern incarnation) is a text editor. It’s a modal text editor. You can switch from insert mode to normal mode. Insert mode is where you type text into your document, and normal mode is where you type commands that do all sorts of functions. It’s incredibly powerful, incredibly complicated and even exiting the editor is not obvious. 🙂

So it’s always great when I dive into learning something new about Vim. There’s always something new to learn about Vim, even after more than twenty years of using it. I think there should be a Duolingo for Vim.

So, when you’re watched that, and watched it again, and again to understand it, have a look at the following presentation showing off the power of Vim without plugins.

When you just want to use Vim faster …

The power of Vim is in the commands. That also means it requires practice to learn those commands because they’re usually keyboard shortcuts. There’s no Edit menu to remind you to use something you just learned. With just a few core concepts and memorized keys or functions you can be very efficient at moving around or manipulating text.

It’s always Vi

Things I learned recently:

  • :set number relativenumber from the last video and this blog post.
  • :sfind is a game changer. I set the base path to my public_html and sfind will open a file in a new split without figuring out the path.
  • I need to install ctags.

And so much more ..