每一个 wordpress 深度用户患者,无不是折腾帝。在优化 wordpress 方面大家各自有自己的一套理论经验,在这里简单分享下我对 wordpress 的一些优化
一、后端删除无用功能
还原最纯粹的后端体验!下面是我的配置项:
/*删除菜单*/
function remove_submenu() {
/* 删除 “媒体库”下面的子菜单“添加”*/
remove_submenu_page('upload.php', 'media-new.php');
/* 删除 “文章”下面的子菜单 “标签”*/
remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag');
/* 删除 “文章”下面的子菜单 “写文章”*/
remove_submenu_page('edit.php', 'post-new.php');
/* 删除 “文章”下面的子菜单 “分类目录”*/
remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category');
//删除外观-主题编辑器
remove_submenu_page('themes.php', 'theme-editor.php');
//删除外观-小工具
remove_submenu_page('themes.php', 'widgets.php');
//删除页面-新建页面
remove_submenu_page('edit.php?post_type=page', 'post-new.php?post_type=page');
}
if (is_admin()) {
add_action('admin_init', 'remove_submenu', '5');
}
/*删除左侧菜单*/
function remove_menus() {
global $menu;
$restricted = array(
__('Dashboard') ,
__('Users') ,
__('Links') ,
__('Settings') ,
__('Plugins') ,
__('Tools') ,
__('Media')
);
end($menu);
while (prev($menu)) {
$value = explode(' ', $menu[key($menu) ][0]);
if (strpos($value[0], '<') === FALSE) {
if (in_array($value[0] != NULL ? $value[0] : "", $restricted)) {
unset($menu[key($menu) ]);
}
} else {
$value2 = explode('<', $value[0]);
if (in_array($value2[0] != NULL ? $value2[0] : "", $restricted)) {
unset($menu[key($menu) ]);
}
}
}
}
if (is_admin()) {
add_action('admin_menu', 'remove_menus');
}
二、前端全静态化
将动态 php 程序渲染后的结果存储为本地的静态 html 文件。
- 在网站根目录下新建 cache 目录,保证当前用户可读写
- 在网站根目录下新建 cache.php 文件,内容如下
<?php
define('CACHE_ROOT', dirname(__FILE__) . '/cache');
define('CACHE_LIFE', 86400); //缓存文件的生命期,单位秒,86400秒是一天
define('CACHE_SUFFIX', '.html'); //缓存文件的扩展名,千万别用 .php .asp .jsp .pl 等等
$file_name = md5($_SERVER['REQUEST_URI']) . CACHE_SUFFIX; //缓存文件名
//缓存目录,根据md5的前两位把缓存文件分散开。避免文件过多。如果有必要,可以用第三四位为名,再加一层目录。
//256个目录每个目录1000个文件的话,就是25万个页面。两层目录的话就是65536*1000=六千五百万。
//不要让单个目录多于1000,以免影响性能。
$cache_dir = CACHE_ROOT . '/' . substr($file_name, 0, 2);
$cache_file = $cache_dir . '/' . $file_name; //缓存文件存放路径
if ($_SERVER['REQUEST_METHOD'] == 'GET') { //GET方式请求才缓存,POST之后一般都希望看到最新的结果
if (file_exists($cache_file) && time() - filemtime($cache_file) < CACHE_LIFE) { //如果缓存文件存在,并且没有过期,就把它读出来。
$fp = fopen($cache_file, 'rb');
fpassthru($fp);
fclose($fp);
exit();
} elseif (!file_exists($cache_dir)) {
if (!file_exists(CACHE_ROOT)) {
mkdir(CACHE_ROOT, 0777);
chmod(CACHE_ROOT, 0777);
}
mkdir($cache_dir, 0777);
chmod($cache_dir, 0777);
}
function auto_cache($contents) { //回调函数,当程序结束时自动调用此函数
global $cache_file;
$fp = fopen($cache_file, 'wb');
fwrite($fp, $contents);
fclose($fp);
chmod($cache_file, 0777);
clean_old_cache(); //生成新缓存的同时,自动删除所有的老缓存。以节约空间。
return $contents;
}
function clean_old_cache() {
chdir(CACHE_ROOT);
foreach (glob("*/*" . CACHE_SUFFIX) as $file) {
if (time() - filemtime($file) > CACHE_LIFE) {
unlink($file);
}
}
}
ob_start('auto_cache'); //回调函数 auto_cache
} else {
if (file_exists($cache_file)) { //file_exists() 函数检查文件或目录是否存在。
unlink($cache_file); //不是GET的请求就删除缓存文件。
}
}
?>
- 在根目录的 index.php 头部引用 cache.php
<?php
require ('cache.php');
与本文不相关的留言,请发留言本谢谢。