web-dev-qa-db-ja.com

プログラムでページテンプレートを切り替える?

私は自分のサイトをメンテナンスモードにするための非常に簡単なトグルを作りたい。これを行うには、メンテナンスページであるテンプレートを定義する管理領域を追加し、メンテナンスモードがオンになっているときにそのページでデータベース定義のテンプレートを上書きできるようにします。

データベースに影響を与えずに、ページごとに呼び出されるテーマテンプレートを変更する方法を教えてください。

2
Mild Fuzz

オプションデータベースの簡単なオプションを使用して、メンテナンスモードのテンプレートファイルをphpするためにtemplate_redirectアクションフックを使用できます。

メンテナンスモードをオンにするときに、たとえばオプションを追加します。

add_option('maintenance_mode_on');

それからこのコードであなたはそのオプションが設定されているかどうかをチェックし、そうであればあなたが望むテンプレートファイルにリダイレクトする:

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

メンテナンスモードをオフにしたら、そのオプションを削除します。

delete_option('maintenance_mode_on');

更新

body_class()を有効にしたい場合は、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');

これはメンテナンスモードがオンになっているときbody_class()がmaintenanceを出力するように変更します。

1
Bainternet