使用define方法的WordPress常量范围

时间:2016-03-02 08:04:49

标签: wordpress plugins scope path constants

我通过常量定义方法将插件路径定义为常量,如下所示。

define( 'MY_PLUGIN_DIR', untrailingslashit( plugin_dir_path( __FILE__ ) ) );

可以在插件中访问所有文件和主题。但是当我在另一个插件中调用此常量时,此常量将变为未定义。

如何在另一个插件中使此插件保持不变?任何帮助将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:0)

可能你的问题是wordpress调用你的插件的顺序:设置常量的插件在调用它之后加载。

可以找到有关如何强制插件首先加载的更好解释here。我在这里引用了重要部分的引用:

  

加载插件的顺序(至少从WP 2.9.1开始)由存储为" active_plugins"的数组的顺序决定。在WP选项表中。每当激活一个插件时,它就被添加到这个数组中,该数组按插件名的字母顺序排序,并且数组被保存到数据库中。

     

幸运的是,有一个方便的动作挂钩" activated_plugins",在活动插件阵列保存到数据库后调用。这允许您在最初保存数组后操纵存储在此数组中的插件的顺序。

您必须在插件中使用以下PHP代码来定义常量,然后停用并重新激活它(从我上面提供的链接复制)。

function this_plugin_first() {
    // ensure path to this file is via main wp plugin path
    $wp_path_to_this_file = preg_replace('/(.*)plugins\/(.*)$/', WP_PLUGIN_DIR."/$2", __FILE__);
    $this_plugin = plugin_basename(trim($wp_path_to_this_file));
    $active_plugins = get_option('active_plugins');
    $this_plugin_key = array_search($this_plugin, $active_plugins);
    if ($this_plugin_key) { // if it's 0 it's the first plugin already, no need to continue
        array_splice($active_plugins, $this_plugin_key, 1);
        array_unshift($active_plugins, $this_plugin);
        update_option('active_plugins', $active_plugins);
    }
}
add_action("activated_plugin", "this_plugin_first");

希望它有所帮助!