priority => callable[]`. * * @var array> */ private $callbacks = array(); /** * Register a callback for a filter or an action. * * @param string $hook Hook name. * @param callable $callback Callback. * @param int $priority Lower runs first. Default 10. * @return void */ public function add( $hook, callable $callback, $priority = 10 ) { $this->callbacks[ $hook ][ (int) $priority ][] = $callback; ksort( $this->callbacks[ $hook ] ); } /** * Drop every callback registered for a hook. * * @param string $hook Hook name. * @return void */ public function remove_all( $hook ) { unset( $this->callbacks[ $hook ] ); } /** {@inheritDoc} */ public function filter( $hook, $value, ...$args ) { if ( empty( $this->callbacks[ $hook ] ) ) { return $value; } foreach ( $this->callbacks[ $hook ] as $callbacks ) { foreach ( $callbacks as $callback ) { $value = call_user_func( $callback, $value, ...$args ); } } return $value; } /** {@inheritDoc} */ public function action( $hook, ...$args ) { if ( empty( $this->callbacks[ $hook ] ) ) { return; } foreach ( $this->callbacks[ $hook ] as $callbacks ) { foreach ( $callbacks as $callback ) { call_user_func( $callback, ...$args ); } } } }