このような答え に基づいて、私は編集者の私達のチームが最終的なテーマを埋めることができる間、 "Coming soon"テーマを表示するテーマを表示するための小さなプラグインを作りました。
昨日はうまくいきましたが、今日はログインしていても「待機中」のテーマしか表示されません。ログアウトして再度ログインしましたが、それでもis_user_logged_in()
関数がfalseを返したように、 "waiting"テーマが表示されます。これらのフックはユーザーの認証を確認するには早すぎますか?
<?php
add_filter('template', 'pxln_change_theme');
add_filter('stylesheet', 'pxln_change_theme');
function pxln_change_theme($theme) {
if ( ! is_user_logged_in() ) {
$theme = 'waiting';
}
return $theme;
}
Filters は、アクションとは異なり、特定の瞬間には実行されませんが、それらが関連付けられている関数も呼び出されます。 template-filterは get_template
から、stylesheet-filterは get_stylesheet
から呼び出されます。
通常、これらの関数はwp_enqueue-scripts
、現在のユーザーが設定されている 後に実行されるアクション を使用してスタイルとスクリプトをエンキューするために呼び出されます。ただし、これらの関数がafter_setup_theme
に添付されている関数から呼び出されることも珍しくありません。 - code--は、現在のユーザーが設定される前に起動されます。
ですから、あなたはあなたのテーマでget_template
とget_stylesheet
(あるいはそれらを使う関数、上のリンクの 'used by'の下で見つけることができる)の使用について調べなければならないでしょう。それから関数が早すぎるフックに接続されているかどうかを確認してください。
これらすべてをフックしてみてください。
(しかし、テーマfunctions.php
から行うのは遅すぎるかもしれないので、プラグインから行う必要があると思います)。
例えば。:
/*
Plugin Name: test
Description: switchtest
Version: 0.1.0
*/
add_filter( 'template', 'yourthing_switch_theme' );
add_filter( 'option_template', 'yourthing_switch_theme' );
add_filter( 'option_stylesheet', 'yourthing_switch_theme' );
add_filter( 'pre_option_stylesheet', 'yourthing_switch_theme' );
function yourthing_switch_theme( $theme )
{
if ( is_user_logged_in() ) {
return $theme;
}
else {
return 'waiting';
}
}