typisttech / wp-contained-hook
Using PSR-11 container implementation in WordPress plugins, themes and packages during WordPress action/filter callbacks.
Fund package maintenance!
typist.tech/donation
Installs: 25 927
Dependents: 3
Suggesters: 6
Security: 0
Stars: 27
Watchers: 4
Forks: 4
Open Issues: 4
Requires
- php: ^7.2
- psr/container: ^1.0
- psr/container-implementation: ^1.0
Requires (Dev)
- 10up/wp_mock: ^0.4.2
- codeception/base: ^3.1
- itinerisltd/itineris-wp-coding-standards: ^0.3.5
- league/container: ^3.3
- roave/security-advisories: dev-master
Suggests
- typisttech/imposter-plugin: Wrap all composer vendor packages inside your own namespace, to prevent collisions when multiple plugins use this library
This package is auto-updated.
Last update: 2024-08-29 04:14:40 UTC
README
- Goals
- Installation
- Usage
- API
- FAQs
- Sponsoring ❤️
- Running the Tests
- Feedback
- Change log
- Security
- Credits
- License
Goals
Using PSR-11 container implementation in WordPress plugins, themes and packages during WordPress action/filter callbacks.
Dependencies are usually lazy loaded(depends on your container implementation), not instantiated until the first time they are used (during WordPress action/filter callbacks).
Installation
Installation should be done via composer, details of how to install composer can be found at https://getcomposer.org/.
You need a psr/container-implementation
package as well. This readme uses league/container
as an example (any psr/container-implementation
works similarly).
# league/container is an example, any psr/container-implementation package works
$ composer require typisttech/wp-contained-hook league/container
Usage
use League\Container\Container; use TypistTech\WPContainedHook\Hooks\Action; use TypistTech\WPContainedHook\Hooks\Filter; use TypistTech\WPContainedHook\Loader; $container = new Container; // Configure the container. // This depends on your `psr/container-implementation`. $container->add('bar', Bar::class); $container->add('foo', Foo::class); // Action. $action = new Action('bar', 'admin_init', 'doSomething'); // Filter. $filter = new Filter('foo', 'the_content', 'filterSomething'); // Add to loader. $loader = new Loader($container); $loader->add($action, $filter); // Add to WordPress. $loader->run();
In plain WordPress, the above is similar to:
$bar = new Bar(); add_action('admin_init', [$bar, 'doSomething']) $foo = new Foo(); add_filter('the_content', [$foo, 'filterSomething'])
In WordPress plus container, the above is similar to:
add_action('admin_init', function ($arg) use ($container): void { $bar = $container->get('bar'); $bar->doSomething($arg); }) add_filter('the_content', function ($arg) use ($container) { $foo = $container->get('foo'); return $foo->filterSomething($arg); })
API
TypistTech\WPContainedHook\Loader
Register all actions and filters for the plugin/package/theme.
Maintain a list of all hooks that are registered throughout the plugin, and register them with the WordPress API. Call the run function to execute the list of actions and filters.
Loader Constructor
- @param Psr\Container\ContainerInterface $container The container.
Example:
$container = new Container; $loader = new Loader($container);
Loader::add(HookInterface ...$hooks)
Add new hooks to the collection to be registered with WordPress.
- @param HookInterface|HookInterface[] ...$hooks Hooks to be registered.
Example:
// Action. $action = new Action(SomeClass::class, 'plugin_loaded', 'doSomething'); // Filter. $filter = new Filter(SomeClass::class, 'the_content', 'filterSomething'); // Add to loader $loader->add($action, $filter);
Loader::run()
Register the hooks to the container and WordPress.
Example:
$loader->run();
Hooks: Action and Filter
Holds necessary information for an action or a filter.
Both Action
and Filter
are subclasses of AbstractHook
and implements HookInterface
.
AbstractHook Constructor.
- @param string $hook The name of the WordPress hook that is being registered.
- @param string $classIdentifier Identifier of the entry to look for from container.
- @param string $callbackMethod The callback method name.
- @param int|null $priority Optional.The priority at which the function should be fired. Default is 10.
- @param int|null $acceptedArgs Optional. The number of arguments that should be passed to the $callback. Default is 1.
Example:
$action = new Action('bar', 'admin_init', 'doSomething', 20, 2); $filter = new Filter('foo', 'the_content', 'filterSomething', 20, 2);
FAQs
Will you add support for older PHP versions?
Never! This plugin will only work on actively supported PHP versions.
Don't use it on end of life or security fixes only PHP versions.
It looks awesome. Where can I find some more goodies like this?
- Articles on Typist Tech's blog
- More projects on Typist Tech's GitHub profile
- More plugins on TangRufus' wp.org profiles
- Stay tuned on Typist Tech's newsletter
- Follow @TangRufus on Twitter
- Hire Tang Rufus to build your next awesome site
Where can I give ⭐⭐⭐⭐⭐ reviews?
Thanks! Glad you like it. It's important to let my know somebody is using this project. Since this is not hosted on wordpress.org, please consider:
- tweet something good with mentioning @TangRufus
- ⭐ star this Github repo
- 👀 watch this Github repo
- write blog posts
- submit pull requests
- sponsor Tang Rufus to maintain his open source projects
- hire Tang Rufus to build your next awesome site
Sponsoring ❤️
Love WP Contained Hook
? Help me maintain it, a sponsorship here can help with it.
GitHub Sponsors Matching Fund
Do you know GitHub is going to match your sponsorship?
Sponsor now via GitHub to double your greatness.
Why don't you hire me?
Ready to take freelance WordPress jobs. Contact me via the contact form here or, via email info@typist.tech
Want to help in other way? Want to be a sponsor?
Contact: Tang Rufus
Running the Tests
Run the tests:
$ composer test
$ composer style:check
Feedback
Please provide feedback! We want to make this library useful in as many projects as possible. Please submit an issue and point out what you do and don't like, or fork the project and make suggestions. No issue is too small.
Change log
Please see CHANGELOG for more information on what has changed recently.
Security
If you discover any security related issues, please email wp-contained-hook@typist.tech instead of using the issue tracker.
Credits
WP Contained Hook is a Typist Tech project and maintained by Tang Rufus, freelance developer for hire.
Full list of contributors can be found here.
License
The MIT License (MIT). Please see License File for more information.