WordPress.org

Make WordPress Core

Ticket #22250: 22250.diff

File 22250.diff, 1.6 KB (added by rzen, 6 years ago)
  • wp-includes/plugin.php

     
    335335}
    336336
    337337/**
     338 * Hooks a function to a specific action, AND allows you to pass custom arguments to that function
     339 *
     340 * @uses Add_Action_Handler to prop up our function and send it the args
     341 *
     342 * @package WordPress
     343 * @subpackage Plugin
     344 *
     345 * @param string $tag
     346 * @param callback $callback
     347 * @param int $priority
     348 * @param null $args one or more arguments to pass to hooked function.
     349 */
     350function add_action_with_args( $tag, $callback, $priority = 10, $args = null ) {
     351
     352        // Accept as many different args as we're passed
     353        $args = array_slice(func_get_args(), 3);
     354
     355        return add_action( $tag, array( new Add_Action_Handler( $args, $callback ), 'action' ), $priority, 1 );
     356}
     357
     358/**
     359 * Helper class for add_action_with_args()
     360 *
     361 * @uses Add_Action_Handler to prop up our function and send it the args
     362 *
     363 * @package WordPress
     364 * @subpackage Plugin
     365 *
     366 * @param array $args           Arguments to pass through to a given callback
     367 * @param string $callback  The callback to run
     368 */
     369class Add_Action_Handler {
     370
     371        private $args;
     372        private $callback;
     373
     374        function __construct($args, $callback = null) {
     375
     376                $this->args = $args;
     377                $this->callback = $callback;
     378        }
     379
     380        function action() {
     381
     382                call_user_func_array($this->callback, $this->args);
     383
     384                if( func_num_args() )
     385                        return func_get_arg(0);
     386
     387                return null;
     388        }
     389}
     390
     391/**
    338392 * Execute functions hooked on a specific action hook.
    339393 *
    340394 * This function invokes all functions attached to action hook $tag. It is