您需要挂接到WordPress加载序列中的适当位置。
例如
add_action(\'init\', \'my_function\'); //is too early and won\'t work!
其中,
add_action(\'wp\', \'my_function\'); //will work!
我也会,
add_action(\'template_redirect\', \'my_function\'); //this works too!
事实上
template_redirect
在将页面/帖子呈现给查看器之前激发,以便它是执行操作的适当位置。
以下面的示例为例,如果将其放置在插件文件中,将成功通过is_single
条件检查,然后继续添加筛选器,该筛选器将替换the_content
对于完全自定义的结果,在本例中是一个输出new content
将显示在数据库中保存的内容的位置。
function plugin_function(){
if(is_single()) {
add_filter(\'the_content\', \'filter_content\');
function filter_content(){
echo \'new content\';
}
}
}
add_action(\'template_redirect\', \'plugin_function\');
例如,尝试将上面的最后一行改为,
add_action(\'init\', \'plugin_function\');
使用
init
钩子是到早期的,而不是像上面的函数那样看到我们过滤的内容,你会注意到数据库中的常规帖子内容被显示出来了。
希望这有帮助。
更新
既然您在评论中提到您正在使用一个类,那么您的
add_action/add_filter
?
Example:
add_action( \'template_redirect\', array( \'YourClassNmae\', \'init\' ) );
class YourClassNmae {
public static function init() {
$class = __CLASS__;
new $class;
}
public function __construct() {
//your actions/filters are to be added here...
add_filter(\'the_content\', array( $this, \'filter_content\') );
}
public function filter_content(){
echo \'new content\';
}
}
Codex Reference: Using add_action with a class