0
votes

I'm new to PHP and WordPress plugin development. In the WordPress Plugin Boilerplate file, includes/class-plugin-name-loader.php, it declares its own add_action function. Is this overriding the default WordPress add_action functions? If so, how do I call the default WordPress add_action function like add_action( 'save_post', 'wpdocs_my_save_post', 10, 3 )

<?php

/**
 * Register all actions and filters for the plugin
 *
 * @link       http://example.com
 * @since      1.0.0
 *
 * @package    Plugin_Name
 * @subpackage Plugin_Name/includes
 */

/**
 * Register all actions and filters for the plugin.
 *
 * Maintain a list of all hooks that are registered throughout
 * the plugin, and register them with the WordPress API. Call the
 * run function to execute the list of actions and filters.
 *
 * @package    Plugin_Name
 * @subpackage Plugin_Name/includes
 * @author     Your Name <[email protected]>
 */
class Plugin_Name_Loader {

    /**
     * The array of actions registered with WordPress.
     *
     * @since    1.0.0
     * @access   protected
     * @var      array    $actions    The actions registered with WordPress to fire when the plugin loads.
     */
    protected $actions;

    /**
     * The array of filters registered with WordPress.
     *
     * @since    1.0.0
     * @access   protected
     * @var      array    $filters    The filters registered with WordPress to fire when the plugin loads.
     */
    protected $filters;

    /**
     * Initialize the collections used to maintain the actions and filters.
     *
     * @since    1.0.0
     */
    public function __construct() {

        $this->actions = array();
        $this->filters = array();

    }

    /**
     * Add a new action to the collection to be registered with WordPress.
     *
     * @since    1.0.0
     * @param    string               $hook             The name of the WordPress action that is being registered.
     * @param    object               $component        A reference to the instance of the object on which the action is defined.
     * @param    string               $callback         The name of the function definition on the $component.
     * @param    int                  $priority         Optional. The priority at which the function should be fired. Default is 10.
     * @param    int                  $accepted_args    Optional. The number of arguments that should be passed to the $callback. Default is 1.
     */
    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.
     *
     * @since    1.0.0
     * @param    string               $hook             The name of the WordPress filter that is being registered.
     * @param    object               $component        A reference to the instance of the object on which the filter is defined.
     * @param    string               $callback         The name of the function definition on the $component.
     * @param    int                  $priority         Optional. The priority at which the function should be fired. Default is 10.
     * @param    int                  $accepted_args    Optional. The number of arguments that should be passed to the $callback. Default is 1
     */
    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.
     *
     * @since    1.0.0
     * @access   private
     * @param    array                $hooks            The collection of hooks that is being registered (that is, actions or filters).
     * @param    string               $hook             The name of the WordPress filter that is being registered.
     * @param    object               $component        A reference to the instance of the object on which the filter is defined.
     * @param    string               $callback         The name of the function definition on the $component.
     * @param    int                  $priority         The priority at which the function should be fired.
     * @param    int                  $accepted_args    The number of arguments that should be passed to the $callback.
     * @return   array                                  The collection of actions and filters registered with WordPress.
     */
    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.
     *
     * @since    1.0.0
     */
    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'] );
        }

    }

}
1
I just noticed you are new to StackOverflow. Welcome to the community! I also want to remind you to mark answers as Accepted if they answer your question or appropriately help you get to the right solution. I noticed on your profile of questions, that you have some answered questions not marked as accepted. Make sure to do that so the people who help you can get the credit they deserve. :)JamesHoux

1 Answers

3
votes

First: Do not use this WordPress Plugin Boilerplate until you learn how to make a WordPress plugin the ordinary WordPress way. The boilerplate you found is complicating things for a beginner.

Google for any beginner document on how to write a wordpress plugin. And read the WordPress official documentation on Actions, Hooks, and Filters. These are sort of the staple for how WordPress works.

Here's a very glossy overview: When you want WordPress to run your plugin, you create an entrypoint function for your plugin. Then you call add_action() to register your function with WordPress. Then WordPress will run your function. Just google for some beginner documentation to learn how to make a plugin and it should show you examples of all this.

Secondly: It looks like the plugin boilerplate is just giving you a pattern for defining a bunch of actions that will be added to the wordpress actions via the foreach loop in the run() function.

There is no overriding going on here. WordPress uses a functional programming paradigm. You don't normally work with objects when you interact with WordPress. Instead, WordPress simply offers a bunch of globally available functions that you call to do things with it. Two of these functions are add_filter() and add_action().

Resource: Here is a link I found that contains a bunch of tutorials and references for creating wordpress plugins: https://www.wpbeginner.com/wp-tutorials/how-to-create-a-wordpress-plugin/