メンテナンス中に訪問者が私のサイトの壊れたバージョンを見るのを防ぎ、更新について注意を喚起するために、一時的なメンテナンスページに自動的にリダイレクトしたいと思います。URLをハードコーディングせずに、あらゆるサイトで使用できるポータブルソリューションを探しています。
ログインした管理者(または他のユーザーレベルの選択)は、バックエンドおよびフロントエンドへのフルアクセスを取得する必要があります。この機能を提供するプラグインはたくさんありますが、コードのみのソリューションを探しています。
メンテナンス中に訪問者が私のサイトの壊れたバージョンを見るのを防ぎ、更新について注意を喚起するために、一時的なメンテナンスページに自動的にリダイレクトしたいと思います。URLをハードコーディングせずに、あらゆるサイトで使用できるポータブルソリューションを探しています。
ログインした管理者(または他のユーザーレベルの選択)は、バックエンドおよびフロントエンドへのフルアクセスを取得する必要があります。この機能を提供するプラグインはたくさんありますが、コードのみのソリューションを探しています。
回答:
WordPressには、メンテナンスモードを処理するための機能が組み込まれています。
プラグインまたはWPダッシュボードからWordPressコアをアップグレードすると、WordPressはメンテナンスモードに入ります:maintenance.php
コンテンツフォルダー(通常/wp-content
)にある名前のファイルをロードしようとし、そのファイルが存在しない場合、WPはデフォルトメッセージを表示します。
このファイルを使用することをお勧めします。この方法で、手動でトリガーされるメンテナンスとWordPressで処理されるメンテナンスの一貫性を保つことができます。
まずmaintenance.php
ファイルを作成し、そこに必要なコンテンツを配置します。スタイリングについては、<style>
タグを使用してファイル自体にCSSを配置することをお勧めします。一般にこれは良いアドバイスではありませんが、この場合、テーマがロードされていない(そしてテーマがアップグレードされている可能性があるため、信頼できない)WordPressが処理するメンテナンスモードでファイルを使用することができます。
コンテンツフォルダーに作成したファイルを保存します(通常は/wp-content
)。
あなたのfunctions.php
プットで:
add_action( 'wp_loaded', function() {
global $pagenow;
if(
defined( 'IN_MAINTENANCE' )
&& IN_MAINTENANCE
&& $pagenow !== 'wp-login.php'
&& ! is_user_logged_in()
) {
header( 'HTTP/1.1 Service Unavailable', true, 503 );
header( 'Content-Type: text/html; charset=utf-8' );
header( 'Retry-After: 3600' );
if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) {
require_once( WP_CONTENT_DIR . '/maintenance.php' );
}
die();
}
});
このコードは定数をチェックし(次のポイントを参照)、ユーザーがログインしていない場合は、ポイント#1で作成されたファイルをロードして終了します。
特定の機能を持つユーザーのみを許可する場合は、のcurrent_user_can('capability_to_allow')
代わりに使用しますis_user_logged_in()
。詳細については、コーデックスを参照してください。
maintenance.php
ログインページへのリンクに追加できる場合があります。このようにして、ログに記録されていないユーザーは、アドレスバーにログインURLを手動で入力しなくてもクリックできます。
サードパーティが開発したテーマを使用している場合は、子テーマを使用します。このようにして、変更を失うことなくテーマを安全に更新できます。
メンテナンスモードを有効にする場合は、を開いてwp_config.php
そこに配置します。
define('IN_MAINTENANCE', true);
その後、サイトを再び公開する準備ができたら、その行を削除するか、に変更true
しfalse
て簡単に再有効化してください。
define('WP_CONTENT_DIR','/url/to/define/');
、wp-config.php
ファイルに追加するのと同じくらい簡単です。
前の答えは完全で、よく書かれています。とにかく、あなたが私のようで、すべてを1か所にまとめたい場合は、function.php
ファイルに次の行をドロップmaintenance.php
して、テーマディレクトリにファイルを作成できます。
これは、Gitリポジトリがテーマディレクトリのみを指している場合に特に便利です。
add_action( 'wp_loaded', function()
{
global $pagenow;
// - - - - - - - - - - - - - - - - - - - - - -
// Turn on/off you Maintenance Mode (true/false)
define('IN_MAINTENANCE', true);
// - - - - - - - - - - - - - - - - - - - - - -
if(
defined( 'IN_MAINTENANCE' )
&& IN_MAINTENANCE
&& $pagenow !== 'wp-login.php'
&& ! is_user_logged_in()
) {
header('HTTP/1.1 503 Service Temporarily Unavailable');
header( 'Content-Type: text/html; charset=utf-8' );
if ( file_exists( get_template_directory() . '/maintenance.php' ) ) {
require_once( get_template_directory() . '/maintenance.php' );
}
die();
}
});
ノート
header('HTTP/1.1 503 Service Temporarily Unavailable');
上記のヘッダーが機能しなかったため、ヘッダーをに変更しました。