Skip to content

Instantly share code, notes, and snippets.

@cdsaenz
Created January 23, 2025 16:35
Show Gist options
  • Save cdsaenz/a164e9dd5963222a38b0ae48fe77e936 to your computer and use it in GitHub Desktop.
Save cdsaenz/a164e9dd5963222a38b0ae48fe77e936 to your computer and use it in GitHub Desktop.
WordPress Central Hooks Loader
<?php
/**
* Register all actions and filters for the main class
*/
namespace CSDev\PluginName;
class Loader {
/**
* The array of actions registered with WordPress.
*/
protected $actions;
/**
* The array of filters registered with WordPress.
*/
protected $filters;
/**
* Initialize the collections used to maintain the actions and filters.
*/
public function __construct() {
$this->actions = array();
$this->filters = array();
}
/**
* Add a new action to the collection to be registered with WordPress.
*/
public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
$this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args );
}
/**
* Add a new filter to the collection to be registered with WordPress.
*/
public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
$this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args );
}
/**
* A utility function that is used to register the actions and hooks into a single
* collection.
*/
private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) {
$hooks[] = array(
'hook' => $hook,
'component' => $component,
'callback' => $callback,
'priority' => $priority,
'accepted_args' => $accepted_args
);
return $hooks;
}
/**
* Register the filters and actions with WordPress.
*/
public function run() {
foreach ( $this->filters as $hook ) {
add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
}
foreach ( $this->actions as $hook ) {
add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] );
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment