在wordpress的日常使用中,如果你对wordpress执行以下操作,则可能在访问wordpress的时候出现如题所示的告警:
1. 升级wordpress版本
2. 升级wordpress的插件
3. 升级wordpress的主题

页面显示如下:

这是原生的Maintenance Mode,可以从截图中看到,即使我是管理员权限,也会受到维护模式的影响。(这种体验很不好)

服务器查看:

[root@knowledge wordpress]# pwd
/www/wwwroot/wordpress
[root@knowledge wordpress]# 
[root@knowledge wordpress]# ls -ltra
total 228
-rw-r--r--  1 nobody nfsnobody   418 Sep 25  2013 index.php
-rw-r--r--  1 nobody nfsnobody   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 nobody nfsnobody  3065 Sep  1  2016 xmlrpc.php
-rw-r--r--  1 nobody nfsnobody  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 nobody nfsnobody  8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 nobody nfsnobody  3669 Aug 20  2017 wp-cron.php
-rw-r--r--  1 nobody nfsnobody  3306 Aug 22  2017 wp-load.php
-rw-r--r--  1 nobody nfsnobody 16246 Oct  4  2017 wp-settings.php
-rw-r--r--  1 nobody nfsnobody  4620 Oct 24  2017 wp-trackback.php
-rw-r--r--  1 nobody nfsnobody 19935 Jan  7  2018 license.txt
drwxr-xr-x  9 nobody nfsnobody  4096 Feb  8  2018 wp-admin
drwxr-xr-x 18 nobody nfsnobody 12288 Feb  8  2018 wp-includes
-rw-r--r--  1 nobody nfsnobody  2930 Feb  8  2018 wp-config-sample.php
-rw-r--r--  1 root   root         49 Oct 25 00:31 .user.ini
-rw-r--r--  1 root   root          1 Oct 25 00:31 .htaccess
drwxr-xr-x  2 root   root       4096 Oct 25 00:31 old
drwxr-xr-x  6 root   root       4096 Oct 25 01:14 ..
-rw-r--r--  1 root   root         33 Oct 26 13:20 bak_maintenance
drwxr-xr-x  7 nobody nfsnobody  4096 Oct 26 13:20 wp-content
-rw-r--r--  1 root   root         33 Oct 26 13:26 bak_1_maintenance
-rw-r--r--  1 nobody nfsnobody  7415 Oct 26 13:36 readme.html
-rw-r--r--  1 nobody nfsnobody  5458 Oct 26 13:36 wp-activate.php
-rw-r--r--  1 nobody nfsnobody  1889 Oct 26 13:36 wp-comments-post.php
-rw-r--r--  1 nobody nfsnobody 37794 Oct 26 13:36 wp-login.php
-rw-r--r--  1 nobody nfsnobody 30091 Oct 26 13:36 wp-signup.php
-rw-rw-rw-  1 www    www        3354 Oct 26 13:46 wp-config.php
-rw-r--r--  1 root   root         33 Nov 22 22:26 .maintenance
drwxr-xr-x  6 www    www        4096 Nov 22 22:26 .
[root@knowledge wordpress]# 
[root@knowledge wordpress]# cat .maintenance 

[root@knowledge wordpress]# 

可以看到,在升级过程中,wordpress会在自己的项目的根目录创建文件【.maintenance】。
而wordpress侦测到存在该文件的时候,则会显示【系统正在升级,请稍等几分钟】的提示。

该部分的功能是通过【class-wp-filesystem-direct.php】控制的。

先备份文件:

[root@knowledge wordpress]# cd wp-admin/
[root@knowledge wp-admin]# cd includes/
[root@knowledge includes]# ls -ltr | grep class-wp-filesystem-direct
-rw-r--r-- 1 nobody nfsnobody  11222 Jul 27  2017 class-wp-filesystem-direct.php
[root@knowledge includes]# 
[root@knowledge includes]# cp class-wp-filesystem-direct.php class-wp-filesystem-direct.php_bak_20181128
[root@knowledge includes]# 
[root@knowledge includes]# ls -ltr | grep class-wp-filesystem-direct
-rw-r--r-- 1 nobody nfsnobody  11222 Jul 27  2017 class-wp-filesystem-direct.php
-rw-r--r-- 1 root   root       11222 Nov 22 22:42 class-wp-filesystem-direct.php_bak_20181128
[root@knowledge includes]# 

然后,查看:
vi class-wp-filesystem-direct.php
cat class-wp-filesystem-direct.php

[root@knowledge includes]# pwd
/www/wwwroot/wordpress/wp-admin/includes
[root@knowledge includes]# 
[root@knowledge includes]# cat class-wp-filesystem-direct.php | grep -A 24 "function mkdir"
        public function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
                // Safe mode fails with a trailing slash under certain PHP versions.
                $path = untrailingslashit($path);
                if ( empty($path) )
                        return false;

                if ( ! $chmod )
                        $chmod = FS_CHMOD_DIR;

                if ( ! @mkdir($path) )
                        return false;
                $this->chmod($path, $chmod);
                if ( $chown )
                        $this->chown($path, $chown);
                if ( $chgrp )
                        $this->chgrp($path, $chgrp);
                return true;
        }

        /**
         *
         * @param string $path
         * @param bool $recursive
         * @return bool
         */
[root@knowledge includes]# 

以上是原生的位置。

也可以通过修改主题的functions.PHP实现对maintenance mode的提示页面的修改:
1)

[root@knowledge wordstar]# pwd
/www/wwwroot/wordpress/wp-content/themes/wordstar
[root@knowledge wordstar]# 
[root@knowledge wordstar]# cat functions.php | tail -n 14
**/

// wordpress maintenance mode

function wp_maintenance_mode(){
    if(!current_user_can('edit_themes') || !is_user_logged_in()){
        wp_die('网站临时维护中,请稍后访问', '网站维护中——请稍后访问', array('response' => '503'));
    }
}
add_action('get_header', 'wp_maintenance_mode');


require get_template_directory() . '/inc/main-funtions.php';
?>
[root@knowledge wordstar]# 

2)

function lxtx_wp_maintenance_mode(){
    if(!current_user_can('edit_themes') || !is_user_logged_in()){
        $logo = '你网站LOGO图片的直链';
        $blogname =  get_bloginfo('name');
        $blogdescription = get_bloginfo('description');
        wp_die(''.$blogname.'正在例行维护中,请稍候...', '站点维护中 - '.$blogname.' - '.$blogdescription ,array('response' => '503'));
    }
}
add_action('get_header', 'lxtx_wp_maintenance_mode');

或者使用插件:Maintenance Switch

Maintenance Switch

安装好后:
默认情况下是没有启用的:

启用的样子:

然后看看页面(普通用户才能看到,管理员对站点的访问不会受到维护的影响:这一点比原生的Maintenance Mode,做得要好一些):

——————————————
Done。

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒