主题内的WordPress维护页面

时间:2017-08-02 06:45:12

标签: php wordpress themes maintenance

我想知道是否有人知道在WordPress主题中使用maintenance.php文件的方法,而不是wp-content文件夹中的文件。

我主要是为functions.php文件寻找一些代码,这些代码会调用theme文件夹中的maintenance.php文件。

我们想在维护页面添加一些品牌,因此最好能够在主题文件夹中使用它。我知道有特殊的插件。但我们不想让我们的网站从仅用于此类小细节的插件中获得太多开销,所以如果有办法通过主题文件夹实现这一点,那就太棒了!

提前致谢!

2 个答案:

答案 0 :(得分:1)

当WordPress进入维护模式时,它会在执行维护时将一个名为.maintenance的文件添加到根目录,然后将其删除。您可以在主题functions.php中编写一个函数来检查此文件,并从主题中加载自定义维护页面。

if ( ! function_exists( 'wpse84987_maintenance_mode' ) ) {
    function wpse84987_maintenance_mode() {
        if ( file_exists( ABSPATH . '.maintenance' ) ) {
            include_once get_stylesheet_directory() . '/maintenance.php';
            die();
        }
    }
    add_action( 'wp', 'wpse84987_maintenance_mode' );
}

将您的维护内容放在主题文件夹中的maintenance.php页面中,然后根据需要设置样式。

如果您使用wp_die功能,您将获得灰色背景上的标准白框。通过这种方式,您可以像维护任何其他主题页一样设置维护页面的样式。

您也可以在主题之外执行此操作,方法是将maintenance.php添加到wp-content目录(或您将WP_CONTENT_DIR设置为指向的任何位置)作为插入式插件。当WP从wp_maintenance()内部检查维护模式时,它将查找该文件并加载(如果存在),或者如果不存在则加载它自己。如果站点未处于维护模式或超过10分钟,则即使站点在技术上仍处于维护模式,也不会加载“maintenance.php”。 WordPress 4.6引入了'enable_maintenance_mode'过滤器,可以({)使用像wp-cli这样的工具来强制检查插件,并允许您从维护文件中运行CLI命令。 / p>

答案 1 :(得分:0)

Wordpress 切换维护模式

我们将创建什么:

  • 用户 - 显示“维护中”页面
  • 管理员 - 能够查看整个网站
  • 向“设置 - 常规”面板添加一个选项以打开/关闭维护模式

首先,在您的主题根目录中创建一个 maintenance.php 文件:

<!DOCTYPE html>
<html <?php language_attributes(); ?>>

<head>
    <meta charset="<?php bloginfo('charset'); ?>">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <?php wp_head(); ?>
</head>

<body class="page-maintenance">

    <img src="<?= get_template_directory_uri() . '/assets/img/logo.png'; ?>" alt="<?= get_bloginfo('name') ?>">
    <p><?= get_bloginfo('description') ?></p>
    <h1>Under maintenance</h1>
    <p><b>We'll be back soon!</b></p>

    <?php wp_footer(); ?>
</body>
</html>

添加到functions.php

/** 
 * Under Maintenance
 */

// Add options checkbox to Settings / General 
function mythemename_settings_general_maintenance()
{
    add_settings_section(
        'my_settings_section', // Section ID 
        'ADDITIONAL SETTINGS', // Section Title
        'my_section_options_callback', // Content Callback
        'general' // Show under "General" settings page
    );
    add_settings_field(
        'maintenance_mode', // Option ID
        'Maintenance mode', // Option Label
        'maintenance_mode_callback', // Callback for Arguments 
        'general', // Show under "General" settings page
        'my_settings_section', // Name of the section
        array( // The $args to pass to the callback
            'maintenance_mode' // Should match Option ID
        )
    );
    register_setting('general', 'maintenance_mode', 'esc_attr');
}
function my_section_options_callback()
{
    // Custom Section Callback content
    echo "Custom theme options";
}
function maintenance_mode_callback($args)
{
    // Checkbox Callback
    $value = get_option($args[0]);
    $checked = ($value == "on") ? "checked" : "";
    echo "<label>
      <input type=\"checkbox\" id=\"$args[0]\" name=\"$args[0]\" $checked />
      <span>Check to activate Maintenance Mode page</span>
    </label><p>A general <i>Under Maintenance</i> page will be shown to non-admin users.</p>";
}
add_action('admin_init', 'mythemename_settings_general_maintenance');

// Handle Maintenance page
if (!function_exists('wp_under_maintenance')) :
    function wp_under_maintenance()
    {
        $isLoginPage = basename($_SERVER['PHP_SELF']) == 'wp-login.php';
        $isMaintenanceModeOn = get_option('maintenance_mode') == "on";

        if (
            $isMaintenanceModeOn &&
            !$isLoginPage &&
            !is_user_logged_in() &&
            !is_admin() &&
            !current_user_can("update_plugins")
        ) {
            get_template_part('maintenance');
            exit();
        }
    }
endif;
add_action('init', 'wp_under_maintenance', 30);

现在转到您的管理面板、设置、常规,您会发现:

enter image description here