web-dev-qa-db-ja.com

ログインしていないユーザーに別のテーマを表示する

このような答え に基づいて、私は編集者の私達のチームが最終的なテーマを埋めることができる間、 "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;
}
4
pixeline

Filters は、アクションとは異なり、特定の瞬間には実行されませんが、それらが関連付けられている関数も呼び出されます。 template-filterは get_template から、stylesheet-filterは get_stylesheet から呼び出されます。

通常、これらの関数はwp_enqueue-scripts、現在のユーザーが設定されている 後に実行されるアクション を使用してスタイルとスクリプトをエンキューするために呼び出されます。ただし、これらの関数がafter_setup_themeに添付されている関数から呼び出されることも珍しくありません。 - code--は、現在のユーザーが設定される前に起動されます。

ですから、あなたはあなたのテーマでget_templateget_stylesheet(あるいはそれらを使う関数、上のリンクの 'used by'の下で見つけることができる)の使用について調べなければならないでしょう。それから関数が早すぎるフックに接続されているかどうかを確認してください。

1
cjbj

これらすべてをフックしてみてください。

(しかし、テーマ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';
   }
}
1
yivi