質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1527閲覧

Wordpressで会員ページを設置しています。ログイン状態でログインページにアクセスした際に、ログインページを介さず会員ページにに飛ばすにはどうしたら良いでしょうか?

moms

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/04/03 03:12

編集2019/04/03 04:52

会員がログインページからログインした後、会員ページにリダイレクトさせることはできたのですが、その後、トップページや誰でも見れるページに戻ってから、ログインページのクリック時にも常に会員ページに飛ばすようにしたいです。

wordpressでサイトを作製しています。
子テーマを作っており、プラグインの WP-Members を使用して会員ページを作っております。
企業サイトのようなイメージでトップページや、お知らせ、概要などほとんどのページは誰でも閲覧できるようになっていて、そのメニューに ・会員ページ の項目があり、s古語がログインページになっており、ログイン後に会員だけが閲覧できるページに飛べる、という仕様です。

現在ログイン後に会員ページに飛ばすのは、子テーマの function.phpに以下のような記述をしています。

functions.php //リダイレクト add_filter( 'wpmem_login_redirect', 'my_login_redirect', 10, 2 ); function my_login_redirect( $redirect_to, $user_id ) { return 'get_template_directory_uri();'.'/会員ページ'; }

この記述でログイン後には会員ページに飛ぶことはできました。
その後、トップページやお知らせなど誰でも見れるページに戻ってから、既にログインしている状態で、ログインページにアクセスした際に、ログインページを介さず会員ページにとべるようにしたいです。
現在は戻ってからログインページをクリックすると

こんにちは xxxxx さん クリックしてログアウト

このようにログインページが表示され、ログインはできているが会員ページにとばない、という状況です。

試したこと

会員の権限を”購読者”に設定しているので、
子テーマのfunctions.phpに以下のような記述をしましたが状況は全く変わりませんでした。特にエラーも出ていません。

functions.php if( $user->roles[0] == 'subscriber' ){ wp_safe_redirect('get_template_directory_uri();'.'/ログインページ','get_template_directory_uri();'.'/会員ページ','top'); exit; }

補足情報

バージョン
WordPress 5.1.1
WP-Members 3.2.6

html cssの知識はありますがphpのことはほぼわからず、調べながらwordpressでサイトを作っております。
リダイレクトについてなどいろいろ調べてみましたが解決できませんでした。どなたかご回答いただける方がいれば、何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/04/03 03:44

「ログインページのクリック時」とは? 勝手な推測ですが「既にログインしていたらログインページにアクセスした際にログインページ介さず会員ページにリダイレクト」ということでしょうか?
moms

2019/04/03 04:42

分かりづらい文章で申し訳ございません。mts10806 様の書いていただいた通りです。 「既にログインしていたらログインページにアクセスした際にログインページ介さず会員ページにリダイレクト」 ご意見ありがとうございます。修正させていただきます。
m.ts10806

2019/04/03 04:50

私はPHPには多少詳しくてもWordPressは全くですが「今アクセスしてるのはログインページ」という判断の仕方はわかりますか?
guest

回答1

0

ベストアンサー

ちょっと調べた感じでしかないですがfunctions.phpに下記のような流れで記述するといけそうです。

  1. 今アクセスしているページがログインページか判断(参考:wordpressでログイン画面(wp-login.php)かどうか判定する方法
  2. ログイン認証済みか判断(参考:WordPressでログイン状態を判定する方法
  3. リダイレクト(質問に書いてある通り)

簡易にコードに起こすとこんな感じ

php

1if(is_login_page() && is_user_logged_in()){ 2 //リダイレクト 3}

投稿2019/04/03 04:54

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/04/03 05:43

あ、is_login_pageはfunction作ってくださいね。標準機能ではないようなので
moms

2019/04/04 02:38

ご回答いただきありがとうございます! 大変初歩的な質問で申し訳ないのですがfunctionを作るというのはこういった記述で合っていますでしょうか? function is_login_page() { return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')); } if(is_login_page() && is_user_logged_in()){ //リダイレクト } これで合っているかわかりませんが、この記述でエラーなどは出ず、状況も改善されませんでした。
m.ts10806

2019/04/04 02:43

//リダイレクト 部分はご自身が作って質問に提示された機能の呼び出しを入れていますか?
moms

2019/04/04 03:49

お返事ありがとうございます。 リダイレクト部分は自分のものを記述しています。
m.ts10806

2019/04/04 03:56

作ったfunctionはそのままで下記の2パターンのコードを試してみてください いずれもログインが済んだ状態で。 1 if(is_user_logged_in()){ exit("ログイン中"); } 2 if(is_login_page()){ exit("ログインページです"); } 1が済んだら1のコードは消して2だけで試してください。 2はログインページに来たときだけに起きるかの確認です。
CHERRY

2019/04/04 04:08

(横からですが...) おそらくフックの中で実行するように記載する必要があります。 functions.php は、比較的早い段階で読み込まれるので、functions.php が読み込まれたタイミングでは、WordPress の変数は定義されていないものも多いです。 WordPressの変数などを参照する場合、WordPress の初期化が終わった後に呼び出されるフックの中に書かないと変数等が設定がされていないので期待する動作をしないと思われます。 リダイレクトであれば、画面出力が始まる直前の「template_redirect フック」あたりでしょうか。
m.ts10806

2019/04/04 04:10

CHERRYさん 補足大変助かります
moms

2019/04/04 05:03

mts10806さん 回答いただき、ありがとうございます。大変励みになります。 mts10806さんにコメントいただいた通りに実行したところ 1、画面に「ログイン中」と出てきました。 2、「こんにちは xxxxx さん」の今までと変わらないログイン後のログインページが表示されました。 CHERRYさん 大変分かりやすく説明していただきありがとうございました。 いただいたコメントに関しては、調べながらこのように記述してみました。 add_action('template_redirect','my_template_redirect'); function my_template_redirect(){ function is_login_page() { return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php')); } if(is_login_page() && is_user_logged_in()){ wp_safe_redirect('get_template_directory_uri();'.'/login','get_template_directory_uri();'.'/members','top'); exit; } } エラーは出ませんでしたが状況は変わりませんでした。。
moms

2019/04/04 08:17

mts10806さん CHERRYさん お二人に教えていただいたことをふまえて、いろいろ試していたらリダイレクトできました! functions.php にこのように記述しました。 add_action('template_redirect','my_template_redirect'); function my_template_redirect(){ if (is_user_logged_in() && is_page('ログインページのスラッグ')) { wp_safe_redirect('get_template_directory_uri();'.'会員ページ'); exit(); } } これで解決いたしました。mts10806さん CHERRYさん のおかげです。 ずっとできなかったので、嬉しいです。 お時間割いてご回答いただきまして、本当にありがとうございました。 mts10806さん 何度もコメントしていただきありがとうございました。
m.ts10806

2019/04/04 08:31

解決されたようで何よりです。 ただ、私よりもWordPressのやり方をきちんと説明されたCHERRYさんの方にお礼をいってもらえればと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問