2017-08-16 80 views
1

我的問題基本上是:「後端」插件是什麼都不影響博客前端的,當匿名用戶加載時,例如瀏覽我的博客?是否在前端加載了WordPress管理插件?

比方說,EWWW圖像optmizer:它只是優化圖像,在後端。它有一個管理界面來優化圖像,但最終用戶根本不使用它。仍然會在每次訪問頁面時加載?

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

+1

據我所知,管理員插件專門用於Admin Dashboard等管理員用途,並且與前端無關,所以大多數情況下它不會像您的博客一樣在前端加載。除非它與前端有關:) – Manjunath

回答

1

據我所知,沒有辦法只在WordPress API中指定一個插件作爲管理員。我知道的唯一插件類型是「必須使用」,「網絡激活」(對於多用戶網站)和「主動」,所以我認爲管理插件也將以非管理模式加載。這些插件在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; 
} 

在主插件文件的開始。所以插件基本上不加載。