问题描述

客户询问他使用的特定转盘插件是否可以插件。这意味着我应该在调用插件功能的 functions.php 中创建一个小工具。这意味着插件的代码必须首先被加载,以便函数在函数 functions.php 文件加载时可用于 wordpress,对吧?会工作吗

最佳解决方案

插件在主题之前加载 (是的,我一直在寻找使用这个):

但是考虑到代码执行点是错误的。大多数情况下,一切都应该早于 init 钩挂钩并执行。根据 Codex 小工具注册与 register_widget()应该挂钩到 widget_init

由于这种负载顺序对于这种情况并不重要,因此在任何情况下,您将拥有时间窗口小工具需要的所有东西。

次佳解决方案

一个有趣的方法是以执行顺序列出所有钩子到文件。

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

你会得到这样的输出:

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

Note the full list simply could not fit the 30.000 characters limitation per WPSO post, so I removed many action hooks.

Put the above code inside a plugin. If you do that from the themes functions.php you will not catch plugins_loaded. One another proof the plugins are loaded before the theme.

这个检查的可能的好处是很多,但是请注意,您将要调用的不同页面模板的输出将不同,或者您在仪表板中。

我简单地从/?p=1 或 Hello World 页面调用。

如果您没有激活一个插件,可以将此代码放入 mu-plugins 文件夹中。

使用 WP FS API 可能会更好,但是这样做很简洁。

第三种解决方案

你可以在插件的.php 文件中有一个小工具 (并且有一个共享的全局变量,它们都可以使用),如果这是你所要求的。这是一个 tutorial with sample code 我偶然发现。

另外,这是一个执行顺序的 list of actions run during a typical request 。 #2 和#10 表示插件首先加载; 不知道 functions.php 。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。