Skip to content

Add type checking for hook callbacks in add_action and add_filter #106

Open
@johnbillion

Description

@johnbillion

I'm planning on working on some rules that check the use of add_action() and add_filter() when the action or filter is from WordPress core. The wp-hooks library facilitates this, and the wp-hooks-generator library facilitates this for hooks in third party plugins and themes (although I'm only concentrating on the WordPress core hooks for now).

I'll open a PR once I have something working.


When I call add_action( 'foo', $callback ) or add_filter( 'foo', $callback ):

  • The signature of the callback function should be checked against the parameters that get passed to the hook
  • The number used in the $accepted_args parameter should match the number of parameters that the callback accepts
  • A filter should not be used as an action, nor vice versa
  • The callback for add_filter must return a value with a type which is compatible with the type passed to it
  • The callback for add_action must return void

Notes:

  • It's fine for the callback function to accept fewer parameters than are passed to the hook (but see point above about $accepted_args)
  • There is no requirement to have a docblock on the callback because it's the job of PHPStan to figure out parameter types and raise errors due to implicit mixed, etc
  • We could also look up the literal hook name, eg plugin_action_links_{$plugin_file} and see if we get a match for dynamic hook names (stretch goal)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions