我想通过编写自己的插件来扩展现有插件。我想我正确地实例化了它,因为它出现在仪表板的插件列表中(尽管我觉得奇怪,我不需要编写激活或停用代码…)。
我使用一个简单的echo \'fd is running\';
它奇怪地出现在所有内容的顶部-网站的每个页面,甚至在管理仪表板中。所以我认为肯定是出了什么问题。
但我想专门扩展另一个插件。因此,我使用了作者在其主文件的构造中制作的动作挂钩:
existing plugin
public static function instance() {
if ( ! isset( self::$instance ) && ! (self::$instance instanceof self) ) {
self::$instance = new self();
self::$instance->setup_constants();
self::$instance->actions = array();
self::$instance->filters = array();
add_action( \'plugins_loaded\', array( self::$instance, \'load_textdomain\' ) );
add_action( \'bp_loaded\', array( self::$instance, \'bp_include\' ) );
global $ap_classes;
$ap_classes = array();
self::$instance->includes();
self::$instance->ajax_hooks();
self::$instance->site_include();
self::$instance->anspress_forms = new AnsPress_Process_Form();
self::$instance->anspress_query_filter = new AnsPress_Query_Filter();
self::$instance->anspress_cpt = new AnsPress_PostTypes();
self::$instance->anspress_reputation = new AP_Reputation();
/*
* ACTION: anspress_loaded
* Hooks for extension to load their codes after AnsPress is leaded
*/
do_action( \'anspress_loaded\' );
self::$instance->setup_hooks();
}
return self::$instance;
}
my plugin
function find_do_for_anspress() {
$FDClassStart = new Find_Do_For_AnsPress();
}
add_action( \'anspress_loaded\', \'find_do_for_anspress\' );
然而,我想测试我的代码是否使用了这个动作挂钩,所以在我使用的现有插件的底部
has_action();
要尝试查看我是否正确使用了它:
existing plugin
//...all of his other code is above. This is after he closes off his Class code and any other functions he added at the bottom, including uninstallation code...
if(has_action(\'anspress_loaded\', \'find_do_for_anspress\')){
echo \'fd is hooked\';
} else {
echo \'NOT WORKING CORRECTLY\';
}
最合适的回答,由SO网友:s_ha_dum 整理而成
。。。(虽然我觉得奇怪,我不需要写激活或停用代码…)。
您不需要激活停用代码,除非您需要在激活或停用时执行某些操作。
我用一个简单的echo“fd正在运行”测试了我的插件;它奇怪地出现在所有内容的顶部-网站的每个页面,甚至在管理仪表板中。
插件在其他内容和代码之前初始化echo
初始化期间的数据。这一点也不奇怪。这正是我们应该期待的。
是的,这就是你使用动作钩的方式。这个特殊的函数不传递任何变量,所以它非常简单。
我是否需要将代码本身实例化为“插件”?仅仅把一些PHP文件放在所有插件所在的同一目录下的文件夹中,并让它们运行操作/过滤器挂钩,难道还不够吗?或者任何类型的代码都需要主题或插件才能工作?
您需要将代码放在可以执行的地方。这是1)一个主题,2)一个插件3)一个mu插件。前两种是最常见的。
1) 您可以将代码放入主题的functions.php
但除非您是主题的作者,否则不应该这样做,因为主题更新时它将被覆盖。
2) 不,你不能只把代码放在插件目录中。它不会执行。您需要添加appropriate plugin headers 并通过后端接口激活插件。
3) 您可以将代码放入mu-plugin
文件,它将立即执行。这是一个强大的选项,因为代码将针对所有主题和所有博客(如果是网络)运行。
我不知道你还有什么问题。