使用带有WordPress过滤器的require_once()

时间:2018-02-12 19:51:45

标签: php wordpress

如果其中一个插件的过滤器返回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语句在过滤器之前触发,它无法正常工作。任何见解或反馈都将非常感谢!

1 个答案:

答案 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' );
    }
}