2

ユーザーが 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 つのページをフロント ページとして表示し、ログアウトしている場合はプラグインから (テーマ ファイルからではなく) 別のページを表示する方法が必要です。この作業を行う方法についての洞察は大歓迎です!

4

1 に答える 1