サポート » 使い方全般 » 1テンプレートでユーザー詳細情報を表示したい

  • 解決済 hakoye

    (@hakoye)


    実装可否が判断できず、もし可能でしたらどのような手順で実装できるかも含めご教授いただきたいです。

    AとBの2種類のユーザー権限(add_roleで独自追加した権限)があり、
    A権限ユーザーのみの一覧を固定ページ(example.com/a-userとします)で表示、
    さらにexample.com/a-user/ここにユーザーIDのようなURLにアクセスしたら、その該当ユーザーの詳細情報が表示される動きを実装したいです。
    (例えばユーザーIDがfooならexample.com/a-user/fooでfooユーザーの詳細情報が見えるイメージです)

    一覧については単純に固定ページを作り、そのテンプレート内でWP_User_Queryを用いることで対応できそうなのですが、
    詳細ページがわからず質問させていただきました。

    自分なりに調べた結果でこのような動きを実装したい場合は、
    ユーザーが登録されたタイミングでそのユーザー情報を表示するための固定ページをwp_insert_postを作成し、
    そこで表示させるしかないように思えたのですが、
    それなりにユーザーが登録されることを考えると固定ページが大量に作成されることになるので、
    できればこの方法は避けたいと思っています。

    理想としては、example.com/a-user/fooのようなURLでアクセスされた際に特定のテンプレートが呼ばれ、
    且つURL末尾にあるユーザーIDを参照してユーザー情報を表示という動きなのですが、
    そもそも普通は存在しないURLにアクセスしようとしているので、これはWordPressの作り的に無理でしょうか。
    もしくは、リライトルール変更などを駆使すれば実装可能でしょうか。

    よろしくお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは

    こちらのトピックが参考になると思います。

    サンプルコードを書いてみました。

    function rewrite_init() {
    	add_rewrite_rule( '^[a|b]-user/([^/]+)$', 'index.php?gu=$matches[1]', 'top' );
    }
    add_action( 'init', 'rewrite_init' );
    
    function rewrite_query_vars_perf( $query_vars ) {
    	$query_vars[] = 'gu';
    	return $query_vars;
    }
    add_action( 'query_vars', 'rewrite_query_vars_perf' );
    
    function rewrite_template_include_perf( $template ) {
    	$group_user = get_query_var( 'gu' );
    	if ( $group_user ) {
    		$template = locate_template( 'page-user.php' );
    	}
    	return $template; 
    }
    add_filter( 'template_include', 'rewrite_template_include_perf' );
    スレッド開始 hakoye

    (@hakoye)

    @ishitaka 様

    わざわざサンプルコードまで書いていただき、ありがとうございます。
    ひとまずご教授いただいたコードをそのままコピペさせてもらったところ思った通りの挙動になりそうです。
    query_varstemplate_includeを組み合わせるなど大変勉強になりました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。