我是否正确地使用了动作挂钩?

时间:2015-11-22 作者:whatwhatwhat

我想通过编写自己的插件来扩展现有插件。我想我正确地实例化了它,因为它出现在仪表板的插件列表中(尽管我觉得奇怪,我不需要编写激活或停用代码…)。

我使用一个简单的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\';
}

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

。。。(虽然我觉得奇怪,我不需要写激活或停用代码…)。

您不需要激活停用代码,除非您需要在激活或停用时执行某些操作。

我用一个简单的echo“fd正在运行”测试了我的插件;它奇怪地出现在所有内容的顶部-网站的每个页面,甚至在管理仪表板中。

插件在其他内容和代码之前初始化echo初始化期间的数据。这一点也不奇怪。这正是我们应该期待的。

是的,这就是你使用动作钩的方式。这个特殊的函数不传递任何变量,所以它非常简单。

我是否需要将代码本身实例化为“插件”?仅仅把一些PHP文件放在所有插件所在的同一目录下的文件夹中,并让它们运行操作/过滤器挂钩,难道还不够吗?或者任何类型的代码都需要主题或插件才能工作?

您需要将代码放在可以执行的地方。这是1)一个主题,2)一个插件3)一个mu插件。前两种是最常见的。

1) 您可以将代码放入主题的functions.php 但除非您是主题的作者,否则不应该这样做,因为主题更新时它将被覆盖。

2) 不,你不能只把代码放在插件目录中。它不会执行。您需要添加appropriate plugin headers 并通过后端接口激活插件。

3) 您可以将代码放入mu-plugin 文件,它将立即执行。这是一个强大的选项,因为代码将针对所有主题和所有博客(如果是网络)运行。

我不知道你还有什么问题。

相关推荐

EDIT-Comments.php COMMENT_ROW_ACTIONS AJAX问题

在编辑注释上。php页面,我正在连接到comment\\u row\\u actions过滤器,以便在末尾添加另一个链接。我正在复制“Approve”链接,添加另一个查询键和值,并修改锚文本。我想根据新查询键的值添加一些注释元。批准的链接:/wp-admin/comment.php?c=9999&action=approvecomment&_wpnonce=8526c66已批准的元链接/wp-admin/comment.php?c=9999&action=approvecommen