各ユーザーごとのマイページを実現する方法
-
お世話になっております。
各ユーザーごとにマイページを持たせる会員制サイトを作ろうとしています。
今、考えているのは、会員数分のサブドメインまたはディレクトリに、
Wordpressをインストールするかマルチサイトにするという方法と、
シングルサイトで人数分のカテゴリを作ってプラグインでアクセス制限するという方法です。
しかし、会員数が1000人を超えるので、サブドメイン・ディレクトリにしてもカテゴリにしても、1000以上作らなければなりません。
将来的に増えることを考えると、管理面で現実的でない気がしますし、サーバーへの負荷も心配です。それで、他に何かよいご提案がございましたら、ご教示をお願いしたく思います。
何卒よろしくお願いいたします。
-
自前でショートコードを作って、固定ページに貼り付けて運用するのはどうでしょうか?
マイページというものがどの程度の機能を必要としているのかにもよりますが、そこまで難しいものではないと思います。もしくは、各ユーザのマイページが http://example.com/profile/user_name のような一意なURLを必要とするのであれば、テーマのauthor.phpを編集することで対応できないでしょうか。
マルチサイトや複数インストールは必要ないと思います。Daisukeさん、早々のご返信をありがとうございます。
具体的には、どのような内容のショートコードになるでしょうか?
マイページの内容としましては、そのページからオーダーを受け、ユーザーごとに発注・納品履歴閲覧やファイルダウンロードなどを行います。一意なURLでなければいけないことはないですが、他の記事で、URLがユーザー名と同じスラッグの記事にリダイレクトさせる記事は拝見しました。
その記事ではpage.phpを用いていましたが、author.phpでも出来るかもしれません。ただ、今回作りたいのは、ユーザー何人かがグループとなり、そのグループの中に一人だけ全員の履歴を閲覧したり出来る人を作る必要があります。
つまり、個人個人だけのマイページだけではないので、グループ分けが必要なのです。
そうしますと、そのグループは、カテゴリかマルチサイト・複数インストールによって実現するしかないのかな…と思っています。どうぞ引き続きご教示のほどお願いいたします。
ユーザのグルーピングついてはカスタムタクソノミーを使えば可能かと。
register_taxonomy()の2つ目の引数に’user’を指定すると、ユーザを分類することができます。
グループ内での特権ユーザ(?)の指定については、add_user_meta()で対応可能です。(add_user_meta($user_id, 'super_user', array('group_id_1', 'group_id_2');など))マイページ側では、クライアントが「ログイン済み」(
is_user_logged_in())で「同一グループに所属」(タクソノミーのタームを確認)していて、「グループ内で管理者」(get_user_meta())であることを確かめて、表示する情報を変えればいいでしょう。Daisukeさん、ありがとうございます。
なるほど!と思うところもあると同時に、現状の私の知識では完全にイメージを掴めていないところも多々ございますので、WordPress Codexなどで少し調べてみてから、またご返信させていただきたく思います。
ただ、add_user_meta()など日本語情報の少ないタグもございますので、完全に理解できないことも多いかもしれません。もし、参照すべきサイトや推奨書物がございましたら、ご教示いただければ助かります。
よろしくお願いいたします。あと、author.phpを使用してマイページを作った場合、他人のマイページまで見えてしまう公開型になってしまわないでしょうか?
当方が作ろうとしているマイページは、非公開型で、ログインしているユーザー本人とその同一グループの特権ユーザーのみが閲覧等出来るマイページです。上記も併せまして、引き続きよろしくお願いいたします。
if(is_user_logged_in()) { if({特権ユーザかどうか}) { // 特権ユーザ向けの表示 } else { // 特権ユーザ以外向けの表示("権限がないですよ"とか) } } else { // ログインしていない人向けの表示("ログインしてくださいねー"とか) }みたいな感じに条件判定を追加していけばすれば非公開にできると思います。と思います。
Daisukeさん、早々にありがとうございます。
けれど、上記の方法では、ログインさえしてしまえば、例えば手入力でURLを入れれば他人のマイページも見えてしまわないですか?
よろしくお願いいたします。
ちょっと説明不足だったので、先のコードの
{特権ユーザかどうか}という部分で行う処理を簡単に書いておきます。そのページのユーザ(http://www.example.com/author/daisuke/ であれば、 daisuke)と現在見ているユーザ(
get_current_user_id()等で取得)について、タクソノミー(所属グループ)の取得やget_user_meta()を取得して、同一のグループであることと特権ユーザであることを順に確認してあげればログインしていても権限がない旨の表示が出るだけです。Daisukeさん、ありがとうございます。
上記を試行錯誤してみたのですが、get_current_user_id()とauthorページのユーザー名から、authorページのユーザーしか見れないようにする方法が分かりません。
get_current_user_id()で取得したユーザーIDからユーザー名を取得する方法があるのでしょうか?ちなみに、まだグルーピングや特権ユーザーを試行するまでにいっていません。
とりあえずまず、authorページのユーザーとログインユーザーが一致した場合のみ見れる環境から作りたいと思っております。何卒よろしくお願いいたします。
ユーザ名を比較するとミスの元ですので、ユーザID同士を比較する方がいいと思います。author.phpでは
$authorにそのページのユーザIDが代入されていますから、if(get_current_user_id() === $author) { /* そのページのユーザに対しての処理 */ } else { /* そのページのユーザ以外への処理 */ }のように分岐することができます。
大変かもしれないですが頑張ってください。
Daisukeさん、早々にありがとうございます!
ユーザーIDでの比較ですか!
ユーザー名ばかりにとらわれて、全然見当違いなことを調べてました。
早速頑張ってみます!
また躓いたら質問させていただきますが、何卒、引き続きよろしくお願い申し上げます。Daisukeさん、お世話になります。
おかげさまで、authorページをそのユーザーしか見れないようにするのは成功しました。
ありがとうございます。
次に、register_taxonomy()の2つ目の引数に’user’を指定してグルーピングすることに四苦八苦しております。
何かヒントはいただけないでしょうか?よろしくお願いいたします。
https://wordpress.org/plugins/user-groups/developers/ のプラグインが似たようなことをやっているので参考になるかもしれません。
トピック「各ユーザーごとのマイページを実現する方法」には新たに返信することはできません。