WordPress管理插件是否在前端加载?

时间:2017-08-16 19:59:30

标签: wordpress performance plugins loader

我的问题基本上是:“后端”插件是什么影响了博客前端,在匿名用户加载时,例如浏览我的博客?

让我们说EWWW图像optmizer,例如:它只是在后端优化图像。它有一个管理界面来优化图像,但最终用户根本不使用它。它仍会在每次访问页面中加载吗?

我不确定我是否清楚自己。希望如此。

1 个答案:

答案 0 :(得分:1)

据我所知,无法在WordPress API中将插件指定为admin。我所知道的唯一插件类型是“必须使用”,“网络激活”(针对多用户网站)和“活跃”,因此我认为管理插件也将以非管理员模式加载。插件加载到wp-settings.php中。我阅读了代码,在我看来,就插件加载而言,WordPress不区分管理模式和非管理模式。相关代码是:

// Load must-use plugins.
foreach ( wp_get_mu_plugins() as $mu_plugin ) {
  include_once( $mu_plugin );
}
unset( $mu_plugin );

// Load network activated plugins.
if ( is_multisite() ) {
  foreach ( wp_get_active_network_plugins() as $network_plugin ) {
    wp_register_plugin_realpath( $network_plugin );
    include_once( $network_plugin );
  }
  unset( $network_plugin );
}

...

// Load active plugins.
foreach ( wp_get_active_and_valid_plugins() as $plugin ) {
  wp_register_plugin_realpath( $plugin );
  include_once( $plugin );
}
unset( $plugin );

function wp_get_mu_plugins() {
  $mu_plugins = array();
  if ( !is_dir( WPMU_PLUGIN_DIR ) )
    return $mu_plugins;
  if ( ! $dh = opendir( WPMU_PLUGIN_DIR ) )
    return $mu_plugins;
  while ( ( $plugin = readdir( $dh ) ) !== false ) {
    if ( substr( $plugin, -4 ) == '.php' )
      $mu_plugins[] = WPMU_PLUGIN_DIR . '/' . $plugin;
  }
  closedir( $dh );
  sort( $mu_plugins );

  return $mu_plugins;
}

function wp_get_active_network_plugins() {
  $active_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
  if ( empty( $active_plugins ) )
    return array();

  $plugins = array();
  $active_plugins = array_keys( $active_plugins );
  sort( $active_plugins );

  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
      )
    $plugins[] = WP_PLUGIN_DIR . '/' . $plugin;
  }
  return $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.0' );
    array_unshift( $plugins, ABSPATH . 'my-hacks.php' );
  }

  if ( empty( $active_plugins ) || 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;
}

当然,最简单的方法是使用可疑插件加载WordPress安装的前端页面,并使用调试器检查它是否加载。

此外,如果插件仅供管理员使用,则插件作者可能只有

if ( ! is_admin() ) {
    return;
}

在主插件文件的开头。因此插件基本上不会加载。