出现这种WordPress主题无法识别问题的原因:
服务器环境禁用了 scandir函数,导致WordPress无法正常缓存主题。
方法1:
- 找到 php.ini,一般在服务器的 /usr/local/php/etc 目录下(有权限的FTP账户可以操作,且一般是这个位置);
- 打开 php.ini,查找其中的“disable_functions”字样,找到并删除紧随其后的“scandir”,最后保存该文件;
- 重启服务器的php服务后方可生效(不懂的话就直接通过管理后台重启服务器也行)。
个人网站还好说,如果遇到大公司,运维不给你开启“disable_functions”权限,那就只能进行方法2
方法2:
后台显示已安装主题的列表的方法是list_themes(),在此函数中,WordPress 使用 get_themes() 函数检索可用主题数组,然后遍历此数组以显示每个主题的详细信息。
使用自定义函数scandir1() 替换scandir()
search_theme_directories()的位置在 wp-includes/theme.php
function scandir1($dir, $sort = 0) {
$files = array();
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file != ‘.’ && $file != ‘..’) {
$files[] = $file;
}
}
closedir($handle);
}
if ($sort != 0) {
$sort == 1 ? sort($files) : rsort($files);
}
return $files;
}