Skip to content

dimitriBouteille/wp-module-hook

Repository files navigation

WordPress hook

GitHub Release Packagist Downloads

WordPress module developed for developers who want to quickly add WordPress hooks (action & filter) without having to manually add each hook in the function.php file (or elsewhere).

Tip

To simplify the integration of this library, we recommend using WordPress with one of the following tools: Bedrock, Themosis or Wordplate.

Documentation

This documentation only covers the specific points of this library, if you want to know more about WordPress action or filter, the easiest is to look at the documentation of WordPress.

You can find all the documentation in the wiki.

Installation

Requirements

The server requirements are basically the same as for WordPress with the addition of a few ones :

Installation

You can use Composer. Follow the installation instructions if you do not already have composer installed.

composer require dbout/wp-module-hook

In your PHP script, make sure you include the autoloader:

require __DIR__ . '/vendor/autoload.php';

Usage

Before creating your first hook, you must initialize the module. It is advisable to add this code at the beginning of the functions.php file of your theme or in a mu-plugin.

<?php

use Dbout\WpHook\HookLoader;

$loader = new HookLoader(
    directory: __DIR__ . '/src/Hooks'
);

$loader->register();

If you want to load hooks from multiple directories, you can pass an array in the directory argument. Additionally, you can use a pattern to define the path :

<?php

use Dbout\WpHook\HookLoader;

$loader = new HookLoader(
    directory: [
        __DIR__ . '/app/Hooks',
        __DIR__ . '/theme/*/Hooks'
    ],
);

The register function will automatically search all hooks (action or filter) in the directory that need to be loaded into WordPress.

Now you have initialized the loader, you just need to create your first hook :

<?php
use Dbout\WpHook\Attributes\Action

#[Action(
    name: 'admin_menu'
)]
class EditAdminMenu 
{    
    public function __invoke()
    {
        // Add your logic 
    }
}

You can also create filter hook :

<?php
use Dbout\WpHook\Attributes\Filter

#[Filter(
    name: 'crontrol/filtered-events',
    acceptedArgs: 2,
)]
class EditEvents 
{    
    public function __invoke(array $filtered, array $events): array
    {
        // Add your logic 
        return $events;
    }
}

Contributing

We encourage you to contribute to this repository, so everyone can benefit from new features, bug fixes, and any other improvements. Have a look at our contributing guidelines to find out how to raise a pull request.