web-dev-qa-db-fra.com

Changer de modèle de page par programme?

Je souhaite créer une bascule très simple pour faire passer mon site en mode de maintenance. Pour ce faire, je souhaite ajouter une zone d'administration afin de définir un modèle de page de maintenance et permettre à cette page de remplacer le modèle défini par la base de données lorsque le mode de maintenance est activé.

Comment puis-je changer le modèle de thème appelé pour chaque page, SANS affecter la base de données?

2
Mild Fuzz

vous pouvez utiliser template_redirect action hook pour inclure php votre fichier de modèle en mode maintenance en utilisant une simple option dans la base de données des options.

Lorsque vous activez le mode maintenance, ajoutez une option par exemple:

add_option('maintenance_mode_on');

ensuite, avec ce code, vous vérifiez si cette option est définie et si vous redirigez le fichier vers le fichier de modèle souhaité:

function custom_maintenance_mode_template_redirect() {
    global $wp;
    if(get_option('maintenance_mode_on')){
        status_header(200); // a 404 code will not be returned in the HTTP headers if the page does not exists

        include(TEMPLATEPATH . "/Custom_template.php"); // include the corresponding template
        die();
    }
}
add_action( 'template_redirect', 'custom_maintenance_mode_template_redirect' );

Puis, lorsque vous désactivez le mode maintenance, supprimez cette option:

delete_option('maintenance_mode_on');

Mettre à jour

Si vous voulez affecter la body_class(), vous pouvez utiliser le hook de filtre body_class:

function custom_body_class($classes){
    if(get_option('maintenance_mode_on')){
            $n_classes[] = "maintenance";
        return $n_classes;
    } else {
        return $classes;
    }
}

add_filter('body_class', 'custom_body_class');

Cela modifiera body_class () en sortie maintenance lorsque le mode de maintenance est activé.

1
Bainternet