A personal WordPress MonoRepo for my themes and plugins


I use a self-built WordPress theme for this blog. I also use a variety of self-developed WordPress plugins for various enhancements. I used to publish these plugins, but I get terribly confused by the SVN shenanigans involved, and they weren't used by many people, so I stopped.

Recently, I've been moving all my plugin code into my theme. This is sort-of-but-not-quite a MonoRepo.

I've also tried to move away, as far as possible, from using other people's plugins. Most of the ones I had were single-shot plugins which did one thing and needed the minimum amount of configuration. So I learned from their code and re-implemented it into my theme.

This isn't quite digital-homesteading. I'm not rolling my own crypto, or building my own CMS. I'm just taking back a little control, learning how things work, and enjoying the busy-work of Digital Gardening.

I don't know if this is a good idea. It means I don't get security updates if my knock-off code is vulnerable. I don't get new features. But I also don't have to trust that a 3rd-party developer isn't going to screw up (I can screw up on my own, thank-you-very-much!). I've had a few bad experiences with plugins which suddenly stopped working, or had abusive behaviour.

HowTo

I put new functionality into a file with a descriptive name, for example related-posts.php and I save it in my-theme/includes/.

In my WordPress's theme, I add this to functions.php:

 PHP//  Load all the files
$includes_path = get_template_directory() . "/includes/";
foreach ( new DirectoryIterator( $includes_path ) as $fileInfo ) {
    if( $fileInfo->isDot() ) continue;  //  Ignore . and ..
    if( $fileInfo->getExtension() != "php" ) continue; // Only load PHP
    require_once( get_template_directory() . "/includes/" . $fileInfo->getFilename() );
}

That loads all the .php files from /includes/.

I have no idea how performant this is. I have some fairly aggressive caching plugins which should minimise any slowness - and they're not part of my MonoRepo.


Share this post on…

What are your reckons?

All comments are moderated and may not be published immediately. Your email address will not be published.

Allowed HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <p> <pre> <br> <img src="" alt="" title="" srcset="">