Wie verwende ich eine maintenance.php-Datei in einem WordPress-Theme?

Lesezeit: 5 Minuten

Benutzeravatar von ProxxiM
ProxxxM

Ich habe mich gefragt, ob jemand eine Möglichkeit kennt, eine maintenance.php-Datei in Ihrem WordPress-Theme anstelle der Datei im wp-content-Ordner zu verwenden.

Ich suche hauptsächlich nach Code für die Datei functions.php, der die Datei maintenance.php im Themenordner aufruft.

Wir möchten der Wartungsseite etwas Branding hinzufügen, und daher wäre es am besten, sie aus dem Themenordner heraus verwenden zu können. Ich weiß, dass es dafür spezielle Plugins gibt. Aber wir möchten unseren Seiten nicht zu viel Overhead durch Plugins geben, die nur für kleine Details wie dieses verwendet werden. Wenn es also eine Möglichkeit gibt, dies über den Themenordner zu erreichen, wäre es großartig!

Wenn WordPress in den Wartungsmodus wechselt, fügt es eine Datei namens .maintenance in das Root-Verzeichnis, während die Wartung durchgeführt wird, dann wird es danach entfernt. Sie können eine Funktion in Ihr Thema schreiben functions.php das nach dieser Datei sucht und eine benutzerdefinierte Wartungsseite aus dem Thema lädt.

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' );
}

Legen Sie Ihre Wartungsinhalte in die maintenance.php Seite in Ihrem Themenordner und Sie können sie so gestalten, wie Sie möchten.

Wenn Sie die verwenden wp_die Funktion erhalten Sie das weiße Standardfeld auf grauem Hintergrund. Auf diese Weise können Sie Ihre Wartungsseite wie jede andere Themenseite gestalten.

Sie können dies auch außerhalb des Themas tun, indem Sie hinzufügen maintenance.php zum wp-content Verzeichnis (oder wo auch immer Sie festgelegt haben WP_CONTENT_DIR um darauf hinzuweisen) als Drop-in-Plugin. Wenn WP von innen nach dem Wartungsmodus sucht wp_maintenance() Es sucht nach dieser Datei und lädt sie, falls vorhanden, oder lädt seine eigene, falls nicht. Wenn sich die Site nicht im Wartungsmodus befindet oder länger als 10 Minuten darin ist, wird „maintenance.php“ nicht geladen, obwohl sich die Site technisch noch im Wartungsmodus befindet. WordPress 4.6 führt die 'enable_maintenance_mode' Filter, der von einem Tool wie (missbraucht) werden kann wp-cli um die Prüfung auf das Drop-in zu erzwingen und Sie einen CLI-Befehl aus Ihrer Wartungsdatei ausführen zu lassen.

  • Seltsam. Ich bin gestern auf genau den gleichen Code gestoßen, aber ich habe ihn damals nicht zum Laufen gebracht. Jetzt funktioniert es wie vorgesehen, es lädt die maintenance.php im Theme! Vielen Dank!

    – ProxxxM

    2. August 2017 um 7:02 Uhr

  • Obwohl dadurch die Datei geladen wird, habe ich festgestellt, dass die Verwendung von WordPress-Funktionen wie z get_header() führt beim Anzeigen der Seite zu einer Meldung über eine nicht definierte Funktion. Wie kann dies gelöst werden, damit die Seite genau wie eine page.php-Datei innerhalb des Designs erstellt werden kann?

    – Lee

    4. September 2018 um 8:19 Uhr

Benutzeravatar von Roko C. Buljan
Roko C. Buljan

WordPress wechselt in den Wartungsmodus

Was wir erstellen werden:

  • Benutzer – Zeigen Sie die Seite “Wird gewartet” an
  • Administrator – in der Lage, die gesamte Website anzuzeigen
  • Fügen Sie dem Bereich „Einstellungen – Allgemein“ eine Option hinzu Wartungsmodus ein-/ausschalten

Erstellen Sie zunächst eine maintenance.php Datei in deinem Theme-Root:

<!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>

Hinzufügen 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);

Gehen Sie jetzt zu Ihrem Admin-Panel, Einstellungen, Allgemein und Sie werden Folgendes finden:

Geben Sie hier die Bildbeschreibung ein

1434810cookie-checkWie verwende ich eine maintenance.php-Datei in einem WordPress-Theme?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy