主题内的WordPress维护页面
WordPress maintenance page inside theme
我想知道是否有人知道如何在 WordPress 主题中使用 maintenance.php 文件,而不是 wp-content 文件夹中的文件。
我主要是为 functions.php 文件寻找一些代码,这些代码将调用主题文件夹中的 maintenance.php 文件。
我们想在维护页面中添加一些品牌标识,因此最好能够从主题文件夹中使用它。我知道有专门的插件。但我们不想让我们的网站从仅用于像这样的小细节的插件中获得太多开销,所以如果有办法通过主题文件夹实现这一点,那就太好了!
提前致谢!
当 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 命令维护文件。
Wordpress 切换维护模式
我们将创造什么:
- 用户 - 显示“维护中”页面
- 管理员 - 能够查看整个网站
- 在“设置”-“常规”面板中添加一个选项以切换维护模式on/off
首先,在您的主题根目录中创建一个 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);
现在转到您的管理面板、设置、常规,您会发现:
我想知道是否有人知道如何在 WordPress 主题中使用 maintenance.php 文件,而不是 wp-content 文件夹中的文件。
我主要是为 functions.php 文件寻找一些代码,这些代码将调用主题文件夹中的 maintenance.php 文件。
我们想在维护页面中添加一些品牌标识,因此最好能够从主题文件夹中使用它。我知道有专门的插件。但我们不想让我们的网站从仅用于像这样的小细节的插件中获得太多开销,所以如果有办法通过主题文件夹实现这一点,那就太好了!
提前致谢!
当 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 命令维护文件。
Wordpress 切换维护模式
我们将创造什么:
- 用户 - 显示“维护中”页面
- 管理员 - 能够查看整个网站
- 在“设置”-“常规”面板中添加一个选项以切换维护模式on/off
首先,在您的主题根目录中创建一个 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);
现在转到您的管理面板、设置、常规,您会发现: