All posts › code
-
The Hiatus is Over
The author announces a return to the WordPress ecosystem after a hiatus, focusing on the FAIR Package Manager project -- a decentralized and federated plugin and theme distribution system built on the ATProto protocol that reached MVP and launched at the Alt Ctrl Org Conference during WCEU 2025 in Basel.
-
Git Updater Lite
Git Updater Lite is a lightweight composer library that lets WordPress plugin and theme developers distribute updates outside of wp.org by pairing with a Git Updater-based Update API Server, offloading data-gathering to the server and keeping the embedded updater minimal.
-
Setting up WordPress local docker environment for Apple Silicon
A step-by-step checklist for standing up the official wordpress-develop Docker environment on Apple Silicon, covering Homebrew, git, Docker, nvm, npm, docker-compose overrides, and shortcut commands for initializing, cleaning up, running PHPUnit tests, and applying Trac patches.
-
Git Remote Updater, the Personal Remote Management System
Git Remote Updater is a WordPress plugin that serves as a personal remote management system, letting developers push Git Updater-managed plugin and theme updates to multiple sites with a single click via REST API webhooks, organized either by repository or by site.
-
WP Core Development with Local Lightning
Step-by-step instructions for setting up a WordPress core development environment using Local Lightning on macOS, covering both the core.git and develop.git repositories, PHPUnit, patch application, npm build tooling, and Apple Silicon-specific notes for nvm and Node.
-
Translations Updater and Easy Digital Downloads
The Translations Updater Composer library integrates with Easy Digital Downloads Software Licensing to provide decoupled language pack updates for EDD-licensed plugins and themes by adding just two extra entries to the existing EDD SL configuration array.
-
Translations Updater
Translations Updater is a Composer library that brings decoupled language pack updating to plugins and themes hosted outside of WordPress.org, letting developers maintain a separate public translations repository and distribute only the locale files a site actually needs.
-
Install a Zipfile with GitHub Updater
GitHub Updater gained the ability to install plugins and themes directly from a local zipfile path or remote URI, treating the zipfile as just another git host type in the Remote Install workflow to solve build-process dependency issues.
-
WordPress Debugging
The WP Debugging plugin automatically enables WordPress debug constants in wp-config.php on activation and removes them on deactivation, bundling optional tools like Query Monitor, Debug Bar, and a log viewer to make PHP error identification accessible without manual file editing.
-
Installing Gitea on a Raspberry Pi
A guide to installing the self-hosted Gitea git server on a Raspberry Pi 3B+ to maintain a long-term test environment for GitHub Updater integration, linking to a detailed gist with step-by-step instructions verified through multiple installs including notes on updating Go and Gitea afterward.
-
GitHub Updater and Gitea
GitHub Updater gained support for Gitea, a lightweight self-hosted Go-based git server, through a collaborative pull request with community contributor Marco Berchart, with the integration being the simplest to add yet thanks to the Gitea API closely mirroring the GitHub API.
-
GitHub Updater - the Path to 8
Version 8 of GitHub Updater raises the minimum PHP requirement to 5.6, introduces a more modular architecture with new hooks, adds automatic plugin renaming on activation, and improves the Settings UI with icons, tooltips, and WP-CLI and webhook support.
-
Local by Flywheel (Pressmatic) and Symlinks
A walkthrough of using symlinks with Local by Flywheel to mirror a local git repository into the wp-content plugins or themes folder, with a bash script to automate recreating the symlinks after the Volumes addon sets up shared folders so IDE editing and version control work together seamlessly.
-
GitHub Updater & GitLab
Version 4.5.0 adds support for GitLab, GitLab CE, GitLab Enterprise, and GitHub Enterprise via new plugin headers, alongside a refactored abstract API class and a dedicated Messages class.
-
Smash API Rate Limit & More
Version 4.3.0 adds a personal GitHub Access Token setting to raise the API rate limit to 5000 calls per hour, along with plugin branch switching and a View details link on the plugins page.
-
GitHub Updater 4.1.0
The v4.1.0 release delivers community bug fixes and a new remote install feature that eliminates the manual download-rename-upload workflow for GitHub and Bitbucket plugins and themes.
-
GitHub Updater and Remote Installation
The v4.0.0 release introduces namespacing and PSR-4 autoloading, and the upcoming v4.1.0 adds one-click remote installation of plugins and themes from public and private GitHub and Bitbucket repositories using the WordPress upgrader classes.
-
Refactoring and Autoloaders
Refactoring work on GitHub Updater and The Events Calendar Category Colors adopts PHP 5.3 namespacing and PSR-4 autoloading via spl_autoload_register, with class aliasing used to maintain backward compatibility across plugin versions.
-
Private Bitbucket Repositories
An update to GitHub Updater reorganizes the Settings page so clients enter their own Bitbucket credentials, improving security by letting developers add clients as read-only users without exposing the developer password.
-
Automatic Plugin & Theme Updating From GitHub – Part 3
Recent improvements to GitHub Updater include privileged-user-only execution, spl_autoload_register for class loading, Parsedown for changelog rendering, a new Settings Page for storing credentials outside the repository, and a fix for a long-standing bug preventing Bitbucket private repository updates.
-
Automatic Plugin & Theme Updating From GitHub – Part 2
A technical deep-dive into how GitHub Updater scans plugin and theme headers, queries the GitHub and Bitbucket APIs with transient caching to avoid rate limits, and hooks into WordPress core update mechanisms with minimal overhead for both developers and end users.
-
Automatic Plugin & Theme Updating From GitHub – Part 1
The origin story of GitHub Updater traces the plugin from its roots as a frustration with manually FTP-ing updates across multiple sites, through a series of forks and collaborations with Gary Jones, Seth Carstens, and Paul Clark, to a combined plugin-and-theme updater.
-
The Events Calendar Outlook Import Fix
A WordPress plugin was created to remove the X-WR-CALNAME header from The Events Calendar iCalendar output, fixing the Outlook behavior of creating a new calendar instead of adding the event to the default one.
-
Transferring IMAP Messages
The final phase of migrating to Dreamhost involved using imapsync with a caching and sync command to transfer all IMAP mail, completing successfully for all users after a minor hiccup with moving mail accounts between domains.
-
Add Custom Header Images
A refactored WordPress plugin submitted to the plugin repository automatically registers all images uploaded to a page called The Headers as selectable or randomized header images, replacing any defaults.
-
Not Running a Server
After more than five years of self-hosting, the decision was made to move to Dreamhost and let professionals handle server administration, with transferring existing IMAP email being the biggest concern.
-
Delete a Tag From GitHub
A quick tip showing how to delete a remote tag from GitHub with a single terminal command, motivated by not wanting to create version tags for minor CSS tweaks to personal child themes.
-
The Events Calendar Category Colors Plugin
Introduction of a WordPress plugin that adds background color support to event categories in the month view of The Events Calendar, integrating with its settings page via the Tribe Settings API and available in the WordPress plugin repository.
-
Add Alarm to Events Calendar PRO
Announcement of a WordPress plugin that adds alarm and reminder support to calendar events created with Events Calendar PRO, requiring an Additional Field to be created in The Events Calendar settings before installation.
-
chroot'd SFTP on Mac OS X server
A detailed walkthrough for setting up a chroot jail for SFTP on Mac OS X Server, covering sshd_config changes, directory ownership rules, using bindfs via Homebrew to mount folders into the jail, and an extra step required after upgrading to Mountain Lion Server.
-
Fail2ban Problems and Solutions
A fix for a Fail2ban issue on OS X where multiple bans sharing the same ipfw rule number get cleared prematurely, solved by generating a random rule number via a shell variable, with custom jails and filters available as a downloadable bundle.
-
Fail2ban and OS X Server, Part Deux
An overview of custom Fail2ban modifications for Snow Leopard Server adding jails for SMTP, POP, IMAP, VNC, and invalid web requests, distributed as a downloadable tarball with an installation script and LaunchDaemon plists to keep Fail2ban running reliably.
-
Setting up Snow Leopard iCal Server
Quick notes on configuring Snow Leopard iCal Server with the correct Wiki Server settings to get group calendars working, including the exact CalDAV URL formats for both macOS iCal and iOS clients.
-
Dovecot Permissions
After migrating to OS X Snow Leopard Server, Dovecot mail folder permission errors caused webmail failures, and terminal scripts using chown are provided to bulk-fix ownership across all mail user directories or reset permissions for a single account by GUID.
-
Snow Leopard Sieve Rules
A guide to manually editing Sieve email filter rules on Mac OS X Snow Leopard Server using terminal commands to locate and modify user-specific sieve script files, including a workaround requiring HTTPS for wiki settings changes to take effect.
-
Server-Side Email Filtering With Sieve
A step-by-step guide to enabling server-side email filtering with Sieve on Mac OS X Server, covering the Sieve service setup, installation of the avelsieve SquirrelMail plugin, and a fix for an authentication bug in its PHP library.
-
False Positive
A command-line workflow for reviewing and releasing SpamAssassin-quarantined email on OS X Server using TextExpander snippets to automate copying, unzipping, previewing, and releasing messages, making the entire process manageable from an iPhone or iPad.
-
Don't Send iCal Replies
A tip for suppressing automatic email replies when accepting or declining iCal invites on Mac OS X, with a downloadable script bundle containing install and uninstall shell scripts and a pointer to the iCal Reply Checker app for those who prefer a GUI.
-
Fail2ban on Leopard Server
Getting fail2ban running on Mac OS X Leopard Server required several workarounds — a launchd plist to create a missing run directory, tweaks to the ipfw action module, and a custom filter for bots hammering nonexistent URLs — all of which are documented and shared.
-
VoodooPad Pro Blogging
A complete workflow is documented for using VoodooPad as a static-site CMS, combining Lua script plugins, a web export plugin, and shell scripts to handle file organization, sitemap generation, Atom feed creation, and URL correction, with a sample project package included.
-
Amavisd settings
Spam with malformed MIME boundaries was bypassing SpamAssassin on an OS X Server mail setup and reaching recipients unscored, and changing the Amavisd final_bad_header_destiny setting from D_PASS to D_REJECT is proposed as the fix.
-
iCal – Exchange Time Zone Fix – Chapter 3
The iCal-Invite-Fix AppleScript was updated to support multiple Exchange servers in a single script by using two paired list properties that map Exchange TZID fragments to the correct iCal time zone identifiers.
-
Importing Mail Message Attachments Into Aperture
An AppleScript called SaveAttachments2Aperture was created to import email attachments directly into Apple Aperture, filling the gap left by the missing Quick Look shortcut that iPhoto users already enjoyed, with later versions adding file-type filtering and support for common camera raw formats.
-
iCal - Exchange Time Zone Fix - Chapter 2
A substantially rewritten iCal-Invite-Fix AppleScript handles the three main Exchange/Outlook invite types (REQUEST, PUBLISH, and CANCEL) and multiple encoding formats, with detailed setup instructions for configuring script properties and wiring the script to a Mail rule.
-
iCal - Exchange Time Zone Fix - Part 2
An interim update to the MailExchange2iCal-TZ-fix script fixes a parsing failure for .ics invites delivered only as attachments or in base64 encoding, and corrects the script so it runs reliably from a Mail rule.
-
iCal - Exchange Time Zone Fix
A single AppleScript solution is presented to fix the broken time zone information that Microsoft Exchange injects into iCal meeting invites, preventing Mac users from missing meetings by correcting the TZID before the event is imported.
-
URL Rewriting
A reposted tutorial covering Apache mod_rewrite, explaining how to transform messy dynamic URLs into clean, human-readable ones using basic redirects, regular expressions, trailing-slash rules, and match modifiers.
-
Running SpamAssassin locally
A walkthrough of using DisSpam with SpamAssassin in a cron job to filter POP3 spam before it reaches an iPhone, including a custom patch that checks headers against a hash file first to dramatically speed up processing of large mailboxes.