这个答案假设您对使用类和对象有基本的了解。完整的答案有点长,如果你不耐烦,请跳到底部的检查表摘要。如果你不理解摘要,请阅读并遵循整个答案。
为了理解如何使用加载器,我们应该查看核心插件类的源代码,Plugin_Name
在里面class-plugin-name.php
.
这个first block of code 在这个类中声明私有容器$loader
:
protected $loader;
接下来,我们看到
the construct 功能
load_dependencies
和
define_public_hooks()
被称为:
public function __construct() {
$this->plugin_name = \'plugin-name\';
$this->version = \'1.0.0\';
// Our fearless loader is called from within this class object.
$this->load_dependencies();
$this->set_locale();
$this->define_admin_hooks();
$this->define_public_hooks();
}
在构造之后,我们看到函数
load_dependencies()
定义这里是调用插件使用的类的资源文件的地方。我们看到的第一个类资源文件
required here is plugin-name-loader.php
.
require_once plugin_dir_path( dirname( __FILE__ ) ) . \'includes/class-plugin-name-loader.php\';
执行此操作:
Require any additional class files your plugin relies on within the load_dependencies()
function.
例如,如果定义了一个名为
Plugin_Name_Alert
在文件中
class-plugin-name-alert.php
位于
includes
插件的目录,通过将此行添加到
load_dependencies()
:
require_once plugin_dir_path( dirname( __FILE__ ) ) . \'includes/class-plugin-name-alert.php\';
第一步完成了。
继续我们的检查,我们看到at the end 在这个函数中,我们先前声明的容器调用$loader
现在定义为类的新对象Plugin_Name_Loader
, 它现在可以这样做,因为在这个函数的前面刚刚需要它:
$this->loader = new Plugin_Name_Loader();
现在让我们跳下来看看
define_public_hooks()
. 这是之前从构造调用的另一个函数。这是一个整理插件使用的挂钩的好地方。下面是它的外观:
private function define_public_hooks() {
// Instantiates a new object of the class Plugin_Name_Public.
$plugin_public = new Plugin_Name_Public( $this->get_plugin_name(), $this->get_version() );
// This is where the loader\'s add_action hooks the callback function of the class object.
$this->loader->add_action( \'wp_enqueue_scripts\', $plugin_public, \'enqueue_styles\' );
// Another action is passed to the class object.
$this->loader->add_action( \'wp_enqueue_scripts\', $plugin_public, \'enqueue_scripts\' );
}
你可以看到这里发生了两件重要的事情:
类的对象被实例化。
加载程序的自定义版本add_action()
将对象作为参数接受。
这就是装载机对我们有用的地方。而不是只将钩子和回调函数传递给add_action()
, 加载器使用自己的自定义add_action()
和add_filter()
允许我们传递三个参数的函数:挂钩、类和回调函数。这样它就知道如何在类中找到函数。
虽然它看起来更复杂,但它标准化了addition of hooks 完全地,在这个过程中将他们分成两个不同的组。WordPress插件样板将挂钩拆分为管理员/公共组,但这还不是全部。它以相同的方式拆分所有代码,要求您在公用文件夹中编写面向公共的代码,在admin文件夹中编写面向管理员的代码。
以下是所有the arguments accepted 由加载程序版本add_action()
:
add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 )
虽然有很多方法可以将类函数传递给WordPress
add_action()
或
add_filter()
, 这就是如何通过样板文件的加载器完成的。
也要这样做:
在函数中
define_public_hooks()
, 您将重复刚才检查的两个步骤。请记住,我们只能这样做,因为之前我们需要我们的类文件
Plugin_Name_Alert
.
1. Instantiate an object of your class:
$plugin_alert = new Plugin_Name_Alert();
2. Use the loader\'s add_action()
to hook a function of $plugin_alert
:
$this->loader->add_action( \'init\', $plugin_alert, \'my_alert_function\' );
仅此而已。这里有一份清单,以确保你已经完成了你需要做的一切。
检查表摘要0. Create your class. 在上述示例中,定义为Plugin_Name_Alert
在includes/class-plugin-name-alert.php
. 下面是一个非常简单的类,您可以使用它进行测试,我们将在每次WordPress初始化时显示一条警报消息:
<?php
class Plugin_Name_Alert {
public function my_alert_function() {
?> <script>alert("VAE VICTIS!");</script> <?php
}
}
1. Require your class within the load_dependencies()
function. 使用的示例:
require_once plugin_dir_path( dirname( __FILE__ ) ) . \'includes/class-plugin-name-alert.php\';
2. Instantiate an object of your class within the function define_public_hooks()
. 例如:
$plugin_alert = new Plugin_Name_Alert();
3. Lastly, hook the function from your class to an action or filter. Do this within define_public_hooks()
. 例如:
$this->loader->add_action( \'init\', $plugin_alert, \'my_alert_function\' );