如果其中一个插件的过滤器返回true
,我试图在我的插件中加入一个类。
我有一个过滤器:
function test_filter() {
$is_enabled = true;
$is_enabled = apply_filters( 'test_filter', $is_enabled );
return $is_enabled;
}
我有一个课程,我想要求:
require_once( PATH . 'class.php' );
我想知道是否有一种方法可以根据test_filter()
过滤条件有条件地包含此类。我试过这个:
if( test_filter() === true ) {
require_once( PATH . 'class.php' );
}
但是我想,由于if
语句在过滤器之前触发,它无法正常工作。任何见解或反馈都将非常感谢!
答案 0 :(得分:1)
在评论中发帖太多了,希望这会让你朝着正确的方向前进......
根据评论,您是对的:在主题中的任何挂钩/过滤器能够运行之前,插件已经加载。
如果你引用WordPress Action Reference,你会看到在加载主题之前已经加载了插件。
您可能会尝试将您的代码放在一个钩子中,以确保在加载之前主题已经加载。
这样的事情:
// first hook that fires after theme is loaded.
// you may also want to consider the 'init' action
add_action( 'after_setup_theme', 'include_my_file' );
// obviously name this something a bit better :)
function include_my_file() {
// switched to Yoda-style for better "defensiveness"
if( TRUE === test_filter() ) {
require_once( PATH . 'class.php' );
}
}
// your original function
function test_filter() {
$is_enabled = true;
$is_enabled = apply_filters( 'test_filter', $is_enabled );
return $is_enabled;
}
请注意,实际上这可以简化为相当数量:
add_action( 'after_setup_theme', 'include_my_file' );
function include_my_file() {
if( TRUE === apply_filters( 'test_filter', TRUE ) ) {
require_once( PATH . 'class.php' );
}
}