39,99 €
Many WordPress projects lose momentum exactly where it matters most: in everyday work. Lengthy deployments, chaotic environments, missing standards – mistakes pile up, budgets spiral out of control, and motivation eventually fades. I’ve been at that point myself.
For more than 16 years I’ve worked as a developer on projects in agencies and companies – and directly within the WordPress Core Team alongside some of the best minds in the community. There I saw which mistakes slow teams down again and again – and which methods keep projects stable.
UnleashWP – Volume 1 is the essence of those experiences. Not a beginner’s book, not endless theory – but a toolbox for professionals: proven workflows, automation, and development environments that provide structure, security, and speed.
What you’ll find in Volume 1:
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Veröffentlichungsjahr: 2025
Vol. 1
Workflows. Automation. Environments.
By Benjamin Zekavica
Visit for more information:www.unleash-wp.com
1st Edition 2025 Volume 1 | English Edition
Kreo Pulse Publishing & Media by Benjamin Zekavica c/o Autorenglück #31329 Albert-Einstein-Strasse 47 02977 Hoyerswerda, Germany
Mailing address via the service provider Autorenglück.
Email:[email protected]:www.kreo-pulse.com
Benjamin Zekavica VAT ID (§ 27a UStG): DE 358 256 337 Owner: Benjamin Zekavica
ISBN: 978-3-69225-007-6 eBook [EPUB], English-Edition
© 2025 Benjamin Zekavica / Kreo Pulse. All rights reserved. This work is protected under copyright law. Any reproduction, distribution, public access, or other use – whether in print or digital form, as a copy, scan, audio, or eBook file – is not permitted without prior written consent of the author. Violations will be prosecuted under civil and criminal law. Short quotations with proper source attribution are permitted within the scope of reviews or academic work.
Author, Book Design & Layout: Benjamin Zekavica Translation, Editing & Proofreading: Aiman Khushnood
WordPress is a registered trademark of the WordPress Foundation. This book has no business, organizational, or legal connection with the WordPress Foundation or Automattic Inc. The term “WordPress” is used solely as a descriptive reference to the open-source software of the same name and is in line with the official trademark guidelines. UnleashWP is an independent publisher and is not affiliated with the WordPress Foundation or Automattic Inc.
This publication will be listed in the German National Bibliography after deposit with the German National Library. Detailed bibliographic data can be accessed online at: http://dnb.d-nb.de.
All written content in this book was created entirely by the author, Benjamin Zekavica. AI tools were used selectively for editing, proofreading, stylistic refinement, and structural review. All texts were reviewed and approved in their final form by the author. AI assistance was used solely for editorial purposes — not for generating original content.
Some illustrations and graphics were created using AI-assisted image generation tools. All final images were selected, adapted, and approved by the author. Tools used: ChatGPT and DALL·E (OpenAI).
All images, illustrations, icons, screenshots, code samples, and other materials used in this book were lawfully licensed or used under permissible copyright exceptions (e.g., quotation of images, open-source licenses, Creative Commons).
A complete and detailed overview of all sources, authors, license types, and copyright notices can be found in the final chapter “Image Credits & Licenses” at the end of this book.
All mentioned trademarks, product names, and company names are the property of their respective owners. Their use in this book is solely for identification and descriptive purposes. This book has no business or contractual relationship with the companies, trademark owners, or organizations mentioned.
All information, code examples, and configurations have been prepared with the greatest care but are provided without warranty. The author accepts no liability for direct or indirect damages that may result from applying the content.
All code samples, scripts, and templates included in this book and in Toolkit Vol. 1 have been carefully checked. However, their use, adaptation, and deployment in production are entirely at your own risk. The author accepts no liability for damages arising from their use. No support or updates are provided.
Start
Imprint
Foreword
How to Get the Most Out of This Book
No Workflow? Then Things Break
A Clean Project Structure
Local Development Environments
Composer and Dependency Management
Bedrock vs. Classic WordPress Structure
Automated Scaffolding with WP-CLI
Assets and Releases
Git Advanced and Branch Concepts
Mirroring Content: From Live to Local
Staging, not Stress
Continuous Integration Pipelines
Environments and Secrets
Testing in Practice
End-to-End Tests with Playwright
Visual Regression Testing with Playwright
Test Data with Faker, WP-CLI and Factories
Tests in CI
Deployment Strategies and Tools
Monitoring, Performance and Security
Under the Hood
Infrastructure and Hosting
Automation with WP-CLI and Scheduled Tasks
Secrets Management: Best Practices
Enterprise and Scaling Strategies
Release Management for Themes and Plugins
Monorepo vs. Multirepo and Private Registry
Enterprise and Agency Best Practices
MU-Plugins: The Invisible Foundation
Themes and Plugins — Order Instead of Chaos
Content Operations and Team Workflows
Crisis Management for WordPress Projects
Change Management and Rollouts
Team Organization and Processes
Documentation and Knowledge Retention
Afterword
My WordPress Toolbox
Glossary
References
Image Credits and Licenses
Start of Content
“WordPress is an instrument. In the wrong hands, it is noise. With intention it becomes harmony.”
Benjamin Zekavica
It’s usually late at night when I’m still at my computer. While most people are asleep, I’m wide awake — not because I have to be, but because I can’t help it. Ideas just don’t let me go. I want to understand why systems work the way they do. I don’t just want to use WordPress; I want to push it forward. And honestly, sometimes it just frustrates me how often WordPress is used the wrong way, or without much care.
More than 16 years ago, I set up WordPress for the very first time. Back then, it was nothing more than a tool I needed — I just wanted a CMS for a small project. I didn’t expect much. But pretty quickly, something about it grabbed me. WordPress was open, fast, and flexible — a tool that didn’t hold me back but gave me real freedom to build.
That first encounter kicked off a journey that’s still going strong. I’ve launched blogs, set up multisites, and built platforms. My experience spans working with freelancers, small teams, and large agencies. I’ve obsessed over tiny details, and I’ve worked on projects that reached millions of people. At some point, it stopped being just about building for myself. I wanted to give back to the community that had given me so much.
My very first Contributor Day changed the way I looked at things. People from all over the world sat together for one day with the same goal: to make WordPress a little better. It was messy, it was loud, and it was buzzing with energy. And I immediately felt part of something bigger.
Since then, I’ve spent countless hours in the community, contributing through discussions, patches, Slack channels, and release teams. I was nervous the first time someone gave me feedback on one of my core contributions. I’ve spent nights chasing bugs and hours debating how a commit message should be written. Sounds crazy? Maybe. But that’s open source. We don’t do it alone; we do it together. And to this day, I’m proud that my work there is valued.
At just 27, I became one of only three WordPress Core Team Representatives worldwide. For me, that’s not just a title. It’s a sign of trust. Proof that the community sees and values my work. And that’s exactly why I want to give something back. UnleashWP is my contribution. It was born out of years of experience, out of successes, mistakes, and experiments. And yes, with a lot of heart.
In all these years, I’ve seen both sides. I’ve seen great ideas fail because workflows were a mess. I’ve seen talented teams stumble because there were no standards or structures. I’ve seen deployments where no one truly knew what was being pushed live. And I’ve seen code that became almost untouchable after just a few months.
But I’ve also seen the other side. Projects that suddenly became stable and calm thanks to clear processes. Teams that worked together more smoothly. Clients who gained trust because professionalism was visible. The difference was never talent. The difference was having a system. And that’s what this book is about.
This is not a beginner’s guide. I’m not going to explain how to install WordPress or what a plugin is. There are enough tutorials for that. What I will show you is how to set up your projects so they last:
with DDEV and Docker, so your environment works the same everywhere,
with Git, to give your project a solid backbone,
with Composer, to keep dependencies in order,
with tests that give you confidence,
with automations that take work off your shoulders, and
with structures that you can still understand years from now.
This isn’t theory. Everything you read here, I use myself every day, in real projects, with real clients, in real teams.
Of course, it won’t always be easy. Some things will challenge you. Some will probably annoy you. But once you’ve experienced how freeing a reproducible, tested, automated project can be, you won’t want to go back.
This book is just the beginning. UnleashWP is meant to become a foundation for the community. A project that will grow not just with more books, but also with tools, plugins, themes, and courses. Always with the same focus: top quality, clean code, real performance. No bloated toolkits, no cookie-cutter solutions. Just real tools that truly help developers and companies.
I want us to stop just throwing random plugins at WordPress. I want us to finally use it the way it was meant to be used: as a solid foundation.
One more thing about production. This book is printed on demand. That means every single copy is only printed once you order it. No overproduction. No warehouses full of unsold books. No unnecessary shipping.
For me, that’s more than just a printing method. It’s a mindset. I believe we need to take responsibility not only in code, but in real life, too. Every copy is produced with sustainability in mind — as locally as possible, with short supply chains. And yes, it makes the print edition more expensive than a mass-market book from a big publisher. But it’s the more honest solution.
I want UnleashWP to not only make WordPress better, but also make a small contribution to protecting our planet.
Thank you for reading this. The fact that you bought this book means a lot to me. It shows that you care about quality. In a world where content is constantly free and disposable, its value is easy to overlook. With your purchase, you’re supporting my work, and the belief that knowledge has value. Thank you for that.
One last thing: this book doesn’t just end with the last page. I’ve prepared something for you to help you put it into practice. At the end, there’s a small gift waiting. I won’t spoil it here, but I promise it will make getting started easier.
Let’s begin!
Benjamin Zekavica
A guide for anyone who’s truly serious
This isn’t a quick-start guide. It’s not a set of ideas to skim through. It’s a tool. A system. And most of all, it’s an entry point into a structured, sustainable way of working with WordPress.
You don’t have to read this book cover to cover. But you also shouldn’t just read it. If you really want to make a change in your projects, your workflow, and your way of thinking, reading alone won’t be enough.
This book is written for developers who already use WordPress and who want to use it more deliberately, clearly, and professionally.
It doesn’t matter if you:
work solo or in a team,
have been developing with WordPress for years or are just digging deeper,
deliver freelance projects or work inside a larger organization …
… what matters is that you’re willing to question, and improve, your workflow. This isn’t about perfection. It’s about mindset. About building a foundation for clean development, no matter the project, client, or team size.
This book won’t teach you how to install WordPress. It’s not about themes, page builders, or quick hacks.
It’s about the technical backbone. Specifically, how to:
set up local projects with DDEV in a reproducible, system-independent way,
establish clean dependency management with Composer,
mirror production content locally, without chaos or version drift,
automate staging and deployments with Git, scripts, and CI/CD,
and design your project structure so it stays maintainable.
The focus is clarity. Efficiency. Simplicity. Not gimmicks.
To get you started, there’s a public repository with all technical examples from this book. You can open it here:
u-wp.com/code
There you’ll find:
all code samples from the book,
Bash scripts for setup,
and CI/CD workflows with GitHub Actions.
In the book, relevant sections are marked with a dedicated icon.
Code samples: So you can dive right in without having to write everything from scratch.
Here’s my recommendation:
Read the book chapter by chapter with your terminal and editor open.
Test every step using the sample project included or one of your own.
Don’t treat the repository as extra material; treat it as your foundation.
Adapt it to your setup. Extend it. Make it your default.
What you build from it is up to you, but I’ve given you everything you need so you won’t have to start from zero.
If you want to set up your projects more reliably, if you want repeatable workflows, if you’re ready to bring more professionalism into your approach, then this book is the right starting point for you.
I’ll show you how to structure WordPress so you’re not just using it, you’re truly developing with it.
Calm. Clear. Step by step.
I’ve seen WordPress projects where the code wasn’t the biggest problem. It was everything around it that was missing. A process, a structure, a shared language for “How do we actually work here?” The sites were up. Clients were even happy at first. But the moment something had to change, reality hit. No one knew what was currently live. Changes were simply overwritten, often directly on the server.
Git? It existed somewhere, but no one knew how up-to-date it was. Bugs appeared, and no one could say where they came from. That’s how you end up with projects that look “finished” from the outside, but become a ticking time bomb with every new feature.
I’m not talking down to you. I started the same way. I used FTP because it was fast. I’d add something to functions.php – live. No testing, no review, no deployment process. Often it worked. Sometimes it didn’t.
Once, I made a tiny CSS fix in a live store. Tested locally, it looked fine. Uploaded it, and accidentally pushed an old JS file along with it. Checkout broke. I noticed and fixed it, but the two orders that came in during that window were incomplete. And tracking was gone.
That was the moment I decided, never again. I’d build a process that prevents mistakes like that in the first place. Not because I’m perfect. But because I know I’m not.
What I see a lot: developers with good ideas who can write clean code, but the framework around it is missing. Not because they can’t do it. But because WordPress doesn’t force a structure on you. You can just start. It works, until it doesn’t. And then it becomes expensive or embarrassing, or both. A workflow is what protects you. Not from making mistakes — they happen anyway — but from only discovering them when the client calls.
A good workflow isn’t a rigid cage. It’s not about doing things the “right” way. It’s about bringing reliability into your day-to-day.
That means:
Every change gets its own branch. No direct commits to main.
No manual deployments. Ever.
Code is reviewed before it goes live, not after.
Bugs are caught in tests before the client finds them.
Everyone works in the same environment, locally and across the team.
It sounds like more work. It isn’t. It saves you time every single day—simply because you’re not patching things that should have been clear in the first place.
Here’s what it looks like when there’s no workflow. You might know this:
WordPress sits in the project root next to screenshot.psd, an OLD folder, and backup.zip.
Custom code lives in functions.php, it is wedged between tracking scripts, shortcodes, and four if statements.
Git? Sure. One repo, three commits: “initial”, “final”, “final-final”.
Deployments via FileZilla, including typos in file names.
And then people wonder why things stop working.
All the more reason. You’re dev, QA, admin, and project manager in one. You can’t afford chaos. A Git history is your memory. A clean process is your shield.
You don’t need a Jira board or a tool stack that gets in the way. But you do need a clear process. For example:
Run through this a few times and you’ll never want to go back. You’ll need fewer meetings, fewer follow-ups, and you can finally focus on the code.
You don’t have to make everything perfect on day one. But you do have to start, so just start. A working workflow isn’t a luxury. It’s the minimum a project deserves. Not because you want to show off, but because you want to be taken seriously — as a developer, as a team, and as a service provider.
In the next chapter, we’ll dive into how to set up a local development environment that works the same everywhere. No XAMPP. No “works on my machine.” A setup you can count on.
Why Structure Decides How Long Your Code Survives
I’ve seen many projects that technically worked, but were almost impossible to maintain. Not because the code itself was poor, but because nobody knew where anything belonged. No schema. No structure. No separation of logic, presentation, and configuration.
What looks fine at first collapses as soon as a new developer joins or when you return to the code six months later. This happens constantly. WordPress sets no rules. You can build themes however you like. You can write plugins however you like.
Whether you put API endpoints in functions.php or a dedicated module, WordPress doesn’t care. The result is that every project looks different. And most of them are unstructured.
Code gets duplicated because nobody can find the original.
Features break because the
helper.php
file was changed in three other places.
Every time you open the project, you lose time reorienting yourself.
Cleanup feels dangerous, one change might break everything.
Progress slows down, even though the goal was to move faster.
A good structure speeds up decisions. It creates clarity, not complexity. And it should be self-explanatory. Not because everything is documented, but because the logic is obvious at first glance.
You can recognize a well-structured project when, within five minutes of opening the repo, you understand the basics even without documentation.
The unstructured reality:
What you see:
Code scattered by technical function, not business purpose
Hidden dependencies nobody tracks
No namespaces, no autoloading
No Composer, no testing, no CI, no conventions
This setup works until something changes. Now let’s compare it with a structured alternative.
Every project, large or small, needs the same fundamentals:
Folder / File
Purpose
app/ orwp-content/
Your actual codebase, separate from WordPress core
mu-plugins/
Logic that must always load: setup, security, core routines
vendor/
Autoloaded dependencies, externally managed, never edited
config/
Config files: environment variables, domains, server paths
tests/
Automated test structures for safe deployments
bin/
Custom scripts, setup routines, CLI tools
.gitignore
Only track what matters
.env.example
Config template for new environments
README.md
An entry point for every developer — non-negotiable
The effect:
Separation by purpose, not technology
A clear entry process:
README.md
,
.env
,
composer install
,
ddev start
.
Instant orientation — you immediately know where the theme is, where logic lives, and where setup begins.
Onboarding in
30 minutes instead of three days
A template that transfers to any new project
Keep folder paths consistent across all projects. Don’t switch between assets/js or js/ or static/js.
Use mu-plugins for foundational setup only, not for features that may be toggled.
Document conventions in
README.md
: branch names, plugin locations, theme slugs.
Use Composer autoloading. It replaces dozens of require_once calls and makes code maintainable.
“It’s just a small project.” “It’s only a landing page.” “I’m the only one working on it.” “The site will be offline soon anyway.”
Small projects grow. Landing pages turn into platforms. Clients demand extensions. And suddenly, you’re stuck wishing you had set it up properly from the start.
A setup you can reuse, not reinvent
An entry point that always works the same way
Standards that accelerate, not slow you down
Structure is not a luxury. It decides whether your project grows or becomes irrelevant.
From Now On: No Excuses
I’ve seen far too many projects where “local” in reality meant everyone hacked together their own thing. One developer used XAMPP, another used MAMP, and a third set up WSL hoping it would behave like the server. It never does.
And that’s where the problems start: If your environment isn’t identical to your teammate’s, your server, or your CI system, you’re testing blind. Sooner or later you’ll ask yourself why code breaks on staging even though “it ran fine on the machine.”
Local today no longer means “just start WordPress somewhere.” Local means an identical, controlled, repeatable environment. No ifs, ands, or buts.
If you’re developing seriously, whether it‘s a plugin, theme, or a full platform, your setup is just as important as your code.
Why? Because otherwise you hunt bugs that aren’t real. You debug features that only fail in your environment. You drag along configuration leftovers that never exist on live. I once had a project where Custom Post Types suddenly disappeared on staging. Locally, everything was clean, validated, error-free.
After two days of digging, it became clear. My colleague had PHP 8.2 locally with a different error reporting level; staging ran PHP 7.4, and a tiny undefined index killed the loop. No error, no log. Just gone. Since then, I don’t touch a project without a standardized environment.
I hated Docker for a long time. Too much setup, too much tinkering, too many things that didn’t work on macOS and behaved differently on Windows. Then DDEV came along. It didn’t replace Docker — it tamed it. Yes, DDEV runs on Docker. But you don’t have to understand Docker to use it. No hand-crafted docker-compose.yml, no custom networks, no port juggling. DDEV takes that overhead off your shoulders.
It packs a complete development stack — PHP, MySQL, MailHog, Composer, Node — whatever you need in a few simple commands.
No setup wiki. No “it doesn’t work on my machine.” No “wait, I still need the right PHP version.”
In short: DDEV is Docker finally made usable.
Handles the annoying parts: hosts file entries, domains, ports, volumes.
Runs the same on macOS, Windows, and Linux. CLI-first, still approachable. PHP, MySQL, MailHog, and Redis available out of the box.
Project-based config: check out a repo, run ddev start, and it works
Here’s a typical setup that’s lean, clear, and traceable.
Important:
.ddev/config.yaml
defines your entire environment: PHP version, web server, database, additional services
WordPress lives in a subdirectory (wp/ or app/) so you don’t mix it with project files
Dependencies are managed with Composer, no manual downloads
Configuration (e.g., DB credentials) is handled via .env or DDEV environment variables
No passwords in code — ever.
If you don’t have DDEV yet, here’s the no-nonsense start.
Requirements:
Docker Desktop or Docker Engine
Homebrew (macOS) or
apt
,
yum
, or
choco
for your system
Installation (macOS or Linux):
brew install drud/ddev/ddev
Installation (Windows with Chocolatey)
choco install ddev -y
Initialize a project:
Create a new folder and navigate into it.
mkdir my-wp-project && cd my-wp-project
ddev config
Follow the prompts:
Project type: WordPress Database name: set automatically by DDEV Webroot: e.g., wp
Then:
ddev start ddev launch
This opens your local WordPress project in the browser under a dedicated .ddev.site domain
That domain ships with SSL, works across platforms, and behaves like a real, live domain—critical for OAuth, SameSite cookies, and URL-based redirects. No manual entries, no extra config.
