A starter plugin for building companion plugins that extend GatherPress — the WordPress plugin for community event management.
It's not meant to ship as-is. Clone it, rename it, and use it as a working scaffold for your own GatherPress add-on.
-
Plugin bootstrap that registers the dependency on GatherPress (
Requires Plugins: gatherpress) so WordPress 6.5+ surfaces it on the Plugins screen and won't activate the companion without it. -
An admin notice if GatherPress isn't loaded for any reason, so the failure mode is visible instead of silent.
-
A duplicate-folder guard that bails when a sibling copy is already loaded (for example, if WordPress includes
gatherpress-awesome-2/alongsidegatherpress-awesome/). -
Registration with GatherPress's coexistence guard, so two folders of the same companion plugin can't both activate.
-
Your namespace wired into GatherPress's class autoloader, so dropping
includes/classes/class-foo.phpis enough to loadGatherPress_Awesome\Foo. -
An "Awesome" settings sub-page rendered inside Settings → GatherPress — the simplest example of hooking into GatherPress's UI.
-
A ready-to-go Playground blueprint that boots WordPress with both GatherPress and this companion installed, plus gatherpress-demo-data already in place.
-
An
uninstall.phpscaffold that walks the multisite blog list and deletes a placeholder option — swap in your own option names when you start storing data.
gatherpress-awesome/
├── gatherpress-awesome.php # Plugin bootstrap (header, autoloader, boot guard, coexistence guard)
├── uninstall.php # Multisite-aware option cleanup on uninstall
├── includes/classes/
│ └── class-setup.php # Singleton entry point — register your hooks here
├── .wordpress-org/blueprints/
│ └── blueprint.json # Playground boot recipe
└── package.json # @wordpress/scripts (build, lint, format, plugin-zip)
- Clone the repository into your local
wp-content/plugins/directory and rename the folder to whatever you want (e.g.,gatherpress-myplugin). - Find-and-replace these tokens across every file (case-sensitive):
gatherpress-awesome→gatherpress-myplugingatherpress_awesome→gatherpress_mypluginGATHERPRESS_AWESOME→GATHERPRESS_MYPLUGINGatherPress_Awesome→GatherPress_MypluginGatherPress Awesome→GatherPress Myplugin
- Rename the entry file:
gatherpress-awesome.php→gatherpress-myplugin.php. The filename, the folder name, and the slug passed togatherpress_register_coexistence_guard()must all match. - Update
package.json(name, description, repository) and bump the plugin headerVersion. - Activate GatherPress + your renamed companion in WordPress.
Most of your work happens inside GatherPress_Awesome\Setup::setup_hooks() (or new sibling classes you autoload via the same namespace). Common extension points GatherPress exposes:
- Hooks — see
docs/developer/hooks/in the GatherPress repo for the full filter and action catalog (auto-generated on every release). - Block patterns — register your own starter patterns via
gatherpress_event_starter_patternsandgatherpress_venue_starter_patternsfilters; see the pattern picker docs. - Settings sub-pages — the
gatherpress_sub_pagesfilter is what wires the Awesome tab demo. Add fields to your sub-page using GatherPress's settings API. - Block hooks — extend the canonical event/venue layouts via the
hooked_block_typesWordPress core API; see the hookable patterns docs.
- Create your own demo-data plugin and reference it from your
.wordpress-org/blueprints/blueprint.jsonso reviewers can spin up a representative sandbox in one click.
GPLv2 or later. See LICENSE in this repository.

