array(
'name' => 'Remove Query Strings',
'desc' => 'Removes all query strings from static resources meaning that proxy servers and beyond can better cache your site content (plus, better SEO scores).',
'filename' => 'remove-query-strings.php',
),
'remove-category-base-littlebizzy' => array(
'name' => 'Remove Category Base',
'desc' => 'Completely disables the category base from all URLs generated by WordPress so that there is no category slug displayed on archive permalinks, etc.',
'filename' => 'remove-category-base.php',
),
'force-https-littlebizzy' => array(
'name' => 'Force HTTPS',
'desc' => 'Redirects all HTTP requests to the HTTPS version and fixes all insecure static resources by implementing relative URLs without altering the database.',
'filename' => 'force-https.php',
),
'disable-emojis-littlebizzy' => array(
'name' => 'Disable Emojis',
'desc' => 'Completely disables both the old and new versions of WordPress emojis, removes the corresponding javascript calls, and improves page loading times.',
'filename' => 'disable-emojis.php',
),
'server-status-littlebizzy' => array(
'name' => 'Server Status',
'desc' => 'Useful statistics about the server OS, CPU, RAM, load average, memory usage, IP address, hostname, timezone, disk space, PHP, MySQL, caches, etc.',
'filename' => 'server-status.php',
),
);
// Initialization
// ---------------------------------------------------------------------------------------------------
/**
* Create or retrieve instance
*/
public static function instance() {
// Check instance
if (!isset(self::$instance))
self::$instance = new NTFTHP_Admin_Suggestions;
// Done
return self::$instance;
}
/**
* Constructor
*/
private function __construct() {
// Check AJAX submit
if (defined('DOING_AJAX') && DOING_AJAX) {
add_action( 'wp_ajax_ntfhp_dismiss', array(&$this, 'dismiss'));
// Admin area (except install or activate plugins page)
} elseif (!in_array(basename($_SERVER['PHP_SELF']), array('plugins.php', 'plugin-install.php', 'update.php'))) {
// Admin hooks
add_action('admin_footer', array(&$this, 'admin_footer'));
add_action('plugins_loaded', array(&$this, 'plugins_loaded'));
}
}
/**
* Footer script
*/
public function admin_footer() { ?>
404 To Homepage recommends the following free plugins:
missing as $plugin) : ?>
- required[$plugin]['name']; ?> Install now!
required[$plugin]['desc']; ?>
missing = $this->get_missing_plugins();
if (empty($this->missing) || !is_array($this->missing))
return;
// Notice action
add_action('admin_notices', array(&$this, 'admin_notices'));
}
/**
* Retrieve uninstalled plugins
*/
private function get_missing_plugins() {
// Initialize
$inactive = array();
// Check plugins directory
$directories = array_merge(self::get_mu_plugins_directories(), self::get_plugins_directories());
if (!empty($directories)) {
$required = array_keys($this->required);
foreach ($required as $plugin) {
if (!in_array($plugin, $directories))
$inactive[] = $plugin;
}
}
// Check inactives
if (empty($inactive))
return false;
// Done
return $inactive;
}
/**
* Collects all active plugins
*/
private function get_plugins_directories() {
// Initialize
$directories = array();
// Plugins split directory
$split = '/'.basename(WP_CONTENT_DIR).'/'.basename(WP_PLUGIN_DIR).'/';
// Multisite plugins
if (is_multisite()) {
$ms_plugins = wp_get_active_network_plugins();
if (!empty($ms_plugins) && is_array($ms_plugins)) {
foreach ($ms_plugins as $file) {
$directory = explode($split, $file);
$directory = explode('/', ltrim($directory[1], '/'));
$directory = $directory[0];
if (!in_array($directory, $directories))
$directories[] = $directory;
}
}
}
// Active plugins
$plugins = wp_get_active_and_valid_plugins();
if (!empty($plugins) && is_array($plugins)) {
foreach ($plugins as $file) {
$directory = explode($split, $file);
$directory = explode('/', ltrim($directory[1], '/'));
$directory = $directory[0];
if (!in_array($directory, $directories))
$directories[] = $directory;
}
}
// Done
return $directories;
}
/**
* Retrieve mu-plugins directories
*/
private function get_mu_plugins_directories() {
// Initialize
$directories = array();
// Dependencies
if (!function_exists('get_plugins'))
require_once(ABSPATH.'wp-admin/includes/plugin.php');
// Retrieve mu-plugins
$plugins = get_plugins('/../mu-plugins');
if (!empty($plugins) && is_array($plugins)) {
foreach ($plugins as $path => $info) {
$directory = dirname($path);
if (!in_array($directory, array('.', '..')))
$directories[] = $directory;
}
}
// Done
return $directories;
}
/**
* Plugin install/activate URL
*/
private function get_install_url($plugin) {
// Check existing plugin
$exists = @file_exists(WP_PLUGIN_DIR.'/'.$plugin);
// Activate
if ($exists) {
// Existing plugin
$path = $plugin.'/'.$this->required[$plugin]['filename'];
return admin_url('plugins.php?action=activate&plugin='.$path.'&_wpnonce='.wp_create_nonce('activate-plugin_'.$path));
// Install
} else {
// New plugin
return admin_url('update.php?action=install-plugin&plugin='.$plugin.'&_wpnonce='.wp_create_nonce('install-plugin_'.$plugin));
}
}
}