using add_action for a header hook that has an additional parameter

How can I pass ‘right’ parameter into add_action?

In short: You don’t pass ‘left’ or ‘right’ itself to add_action(), but you can make the parameter be available in your callback by using the fourth parameter for add_action(). See examples below.


So despite you may already know this, a hook is a specific place in a block of (PHP) code where custom functions like yours (my_custom_function()) can do a certain action like displaying a custom text, or maybe perform some database inserts.

And you can make that possible by using add_action() to register your callback/function which then WordPress will call via do_action(). I.e. add_action() registers a callback for running an action on a hook, whereas do_action() calls the callback that runs the action.

And there are different ways of calling add_action() and do_action(), but the basic ones are:

  • do_action():

    // This hook has just one parameter.
    do_action( 'hook name', $param );
    
    // But this one has two parameters.
    do_action( 'hook name', $param, $param2 );
    
    // And a hook can have as many parameters as necessary.
    do_action( 'hook name', $param, $param2, $param3, ... );
    
  • add_action():

    // This means the callback will receive just one parameter,
    add_action( 'hook name', 'function_name' );
    // and it's equivalent to:
    add_action( 'hook name', 'function_name', 10, 1 );
    
    // And same goes with this; but the priority is 9 - the default is 10,
    add_action( 'hook name', 'function_name', 9 );
    // and it's equivalent to:
    add_action( 'hook name', 'function_name', 9, 1 );
    
    // And this one, it uses the default priority, but accepts 2 parameters.
    add_action( 'hook name', 'function_name', 10, 2 );
    

So in your case, these do_action() calls:

do_action( 'sinatra_header_widget_location', 'left' );
do_action( 'sinatra_header_widget_location', 'right' );

.. are identical to the first do_action() example above, which means the hook (sinatra_header_widget_location) has just one parameter, whereby the value is either left or right.

And by default, when WordPress — via do_action() — calls callbacks registered to a hook, they will always receive the first parameter passed by the hook to do_action().

So you just need to make sure that your function accepts that first parameter.

( And the 2nd, 3rd, etc. parameters if there were any and that you wanted to access them from your callback. )

So for example, you can name it $position and do a conditional to check whether the value is left or right, because the sinatra_header_widget_location hook is being called twice — one with left being the value of the first (and only) parameter, and the other being right:

function my_custom_function( $position ) {
    if ( 'right' === $position ) {
        echo 'yay, it\'s "right"';
    }
}

So I hope this revised answer helps you more :), and be sure to check the documentation for add_action() and do_action() because you’ll find more information there, including user-contributed notes/examples that can assist you in using the functions (the proper way):