ユーザーが WordPress フロントエンドからサインアップおよびログインするのを支援し、ユーザーがログインしているかどうかに基づいてリソースを非表示および表示するプラグインを構築しています。
私が行き詰まった領域の 1 つは、ユーザーのログイン/ログアウト状態に基づいてルート ドメインに表示されるホームページを変更する方法です。テーマ テンプレートでは、次の構造を使用して簡単に実現できます。
if ( is_user_logged_in() ) {
// Logged-in user content
} else {
// Logged-out user content
}
ただし、これはプラグインなので、サイト管理者がテーマ ファイルをいじる必要はありません。これまでのところ、これを追加してフロントページを動的に書き換えようとしました:
if ( is_user_logged_in() ) {
$about = get_page_by_title( 'Front Page Logged In' );
update_option( 'page_on_front', $about->ID );
update_option( 'show_on_front', 'page' );
} else {
$about = get_page_by_title( 'Front Page Logged Out' );
update_option( 'page_on_front', $about->ID );
update_option( 'show_on_front', 'page' );
}
関数はupdate_option
単独で動作しますが、if ステートメントでラップされているため、致命的なエラーがスローされるため、サイトはまったく読み込まれません。
add_rewrite_rule
また、 API を使用して、ルート ドメインを別のページとして扱うように WordPress に指示することも試みました。これは特定のページを指定するときに機能しますが、ルート (およびルートのみ) URL に対して機能させる方法がわかりません。また、できたとしても、if ステートメントでラップされたときにも正しく機能しません。
function add_my_rule() {
if ( is_user_logged_in ) {
add_rewrite_rule('test','index.php?pagename=loggedin','top');
} else {
add_rewrite_rule('test','index.php?pagename=loggedout','top');
}
}
add_action('init', 'add_my_rule');
要約すると、ユーザーがログインしている場合は 1 つのページをフロント ページとして表示し、ログアウトしている場合はプラグインから (テーマ ファイルからではなく) 別のページを表示する方法が必要です。この作業を行う方法についての洞察は大歓迎です!