WordPress如何知道插件位于何处?

时间:2015-10-01 作者:R.G.

显然,WordPress知道安装的插件的位置。

与其他CMS软件相比,WordPress插件的位置规范非常宽松。如果我没有弄错的话,插件文件不需要位于标准插件文件夹中,它可以位于插件文件夹的子文件夹中,也可以位于子文件夹中的子文件夹中。甚至可能在同一文件夹中有多个插件,或者在已有插件的文件夹中有另一个插件。

在安装过程中的某个时候,路径必须由WordPress“注册”存储。WordPress在哪里记录这些信息,管理员是否可以轻松访问这些信息?

2 个回复
最合适的回答,由SO网友:Daniel Muñoz Parsapoormoghadam 整理而成

插件文件不需要位于标准插件文件夹中,这是错误的。此插件文件夹由常量定义WP_PLUGIN_DIR, 其值为WP_CONTENT_DIR . \'/plugins\'.如果你打开/wp-includes/load.php, 您将找到该函数wp_get_active_and_valid_plugins(), 定义人

function wp_get_active_and_valid_plugins() {
    $plugins = array();
    $active_plugins = (array) get_option( \'active_plugins\', array() );

    // Check for hacks file if the option is enabled
    if ( get_option( \'hack_file\' ) && file_exists( ABSPATH . \'my-hacks.php\' ) ) {
        _deprecated_file( \'my-hacks.php\', \'1.5\' );
        array_unshift( $plugins, ABSPATH . \'my-hacks.php\' );
    }

    if ( empty( $active_plugins ) || defined( \'WP_INSTALLING\' ) )
        return $plugins;

    $network_plugins = is_multisite() ? wp_get_active_network_plugins() : false;

    foreach ( $active_plugins as $plugin ) {
        if ( ! validate_file( $plugin ) // $plugin must validate as file
            && \'.php\' == substr( $plugin, -4 ) // $plugin must end with \'.php\'
            && file_exists( WP_PLUGIN_DIR . \'/\' . $plugin ) // $plugin must exist
            // not already included as a network plugin
            && ( ! $network_plugins || ! in_array( WP_PLUGIN_DIR . \'/\' . $plugin, $network_plugins ) )
            )
        $plugins[] = WP_PLUGIN_DIR . \'/\' . $plugin;
    }
    return $plugins;
}
从WP\\u PLUGIN\\u DIR定义的默认目录中检索有效和活动插件的数组。

SO网友:Mitul

下面是代码,如果插件检查安装位置,他可以从中获得列表

function get_mu_plugins() {
$wp_plugins = array();
// Files in wp-content/mu-plugins directory
$plugin_files = array();

if ( ! is_dir( WPMU_PLUGIN_DIR ) )
    return $wp_plugins;
if ( $plugins_dir = @ opendir( WPMU_PLUGIN_DIR ) ) {
    while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
        if ( substr( $file, -4 ) == \'.php\' )
            $plugin_files[] = $file;
    }
} else {
    return $wp_plugins;
}

@closedir( $plugins_dir );

if ( empty($plugin_files) )
    return $wp_plugins;

foreach ( $plugin_files as $plugin_file ) {
    if ( !is_readable( WPMU_PLUGIN_DIR . "/$plugin_file" ) )
        continue;

    $plugin_data = get_plugin_data( WPMU_PLUGIN_DIR . "/$plugin_file", false, false ); //Do not apply markup/translate as it\'ll be cached.

    if ( empty ( $plugin_data[\'Name\'] ) )
        $plugin_data[\'Name\'] = $plugin_file;

    $wp_plugins[ $plugin_file ] = $plugin_data;
}

if ( isset( $wp_plugins[\'index.php\'] ) && filesize( WPMU_PLUGIN_DIR . \'/index.php\') <= 30 ) // silence is golden
    unset( $wp_plugins[\'index.php\'] );

uasort( $wp_plugins, \'_sort_uname_callback\' );

return $wp_plugins;
}

代码写入wp-admin\\includes\\plugin.php