サポート » 使い方全般 » 「ユーザー情報」を「カスタム投稿タイプ」として管理する方法の問題点について

  • お世話になっております。「ユーザー情報」を「カスタム投稿タイプ」として管理できるのではないかと思いました。その方法に問題や懸念があれば教えてください。

    たとえばユーザーと投稿を同時に呼び出したい場合(たとえば検索時のサジェスト表示などの場合)、WP_QueryだけでなくWP_User_Queryも発行しなければならず、通信に「2回分のコスト」が生じますよね。

    そこで考えたのが、「ユーザー情報」を「カスタム投稿タイプ “user” 」として管理する次の方法です。

    【登録方法】
    通常のプロフィール情報と同様にしつつ、そのプロセスの最後にuser_registerのフックを使い、ユーザーIDを元に発行したスラッグで、”user” を投稿する。

    【運用方法】
    ユーザーのプロフィール情報は全てこの “user” のカスタムフィールドに保存する。

    と、この方法ならばWP_Queryだけでユーザーと投稿を同時に呼び出せますので、上の「2回分のコスト」がなくなって良いのではないか?という考えになります。

    こちらの方法について、何か生じうる問題や想定される懸念はございますでしょうか?

    つかみどころがなくご指摘も難しいかと思いますが、「こういうケースでは問題が生じるよね」とか「こんな懸念があるよ」など、何か思いつくことがあればアドバイス頂ければと思い、あいまいなままでのご質問とさせて頂きました。

    尚、サイトの目的はTwitterと同じものを作ることになります。ご経験者の皆様からアドバイス頂戴できましたら幸いです。

    以上です。どうぞ宜しくお願い致します。

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

    投稿検索用のWP_Queryとユーザー検索用のWP_Queryの「2回分のコスト」が生じるのは同じではないのですか?

    いつもありがとうございます。

    そうなのですか?次のようにカスタム投稿タイプとして呼び出しをまとめられるので、これを指して1回分で済むというイメージでした。

    【ユーザー情報をカスタム投稿タイプで管理した場合】

    //1回で二つとも呼べる
    $args = array(
    'post_type' = array('mypost','user'),
    'post__in' = array('100,200,1,2'),
    );
    $the_query = new WP_Query( $args );

    【普通の場合】

    // 1回目にカスタム投稿タイプを呼ぶ
    $args = array(
    'post_type' = array('mypost'),
    'post__in' = array('100,200'),
    );
    $post_query = new WP_Query( $args );
    
    // 2回目にユーザーを呼ぶ
    $args = array(
    'include' => array('1,2');
    );
    $user_query = new WP_User_Query( $args );

    上は結局同じコストなのでしょうか?

    それでは、他の視点として、検索結果として使うことを考えるといかがでしょうか?
    たとえば「ユーザー登録日」と「カスタム投稿タイプの投稿日」とを合わせてソートし、検索結果として順に表示する。などです。
    こういったケースでは上の【普通の場合】は少し面倒に感じるのですが。(それぞれ読んでから日付でソートし直さないといけないのではないかと。)

    そのように呼ぶとは思いませんでしたが、一覧表示する場合は表示件数 10 件や投稿者、検索キーワードなどの絞り込みが必要かと思いますが、ユーザー情報のカスタム投稿を同じ条件で絞り込むことが出来ないと思いますが・・・

    また、データのうち一番数が多くなるのが post かと思いますが、その中に相対的に圧倒的少数のユーザーを入れてユーザー情報を抽出するコストを上げるくらいなら2回クエリを流したらいいんじゃないでしょうか。

    wp_post の件数が1,000 件ぐらいにしかならないなら気にしなくてもいいかもしれません。

    「他の視点」についてはちょっと意味が分かりませんでした。
    wp_user の「ユーザー登録日」と wp_post のユーザー情報が保持されている「カスタム投稿タイプの投稿日」を合わせてソートする・・・?
    「検索結果として順に表示する」というのは、ユーザーを検索した結果でしょうか?

    ご返信ありがとうございます。大変申し訳ございませんが、以下【1】から【4】までご一読頂いてもよろしいでしょうか。

    【1】
    >そのように呼ぶとは思いませんでした

    その呼び方はおかしかったでしょうか?「”mypost” の取得とユーザーの取得」または「”mypost” の取得と “user” の取得」というと、その呼び方しか知りませんで…

    【2】
    >一覧表示する場合は表示件数 10 件や投稿者、検索キーワードなどの絞り込みが必要かと思いますが、ユーザー情報のカスタム投稿を同じ条件で絞り込むことが出来ないと思いますが

    まず表示件数についてですけど、絞り込みできないのはなぜですか?'posts_per_page'=>10でいけませんでしょうか?

    あと検索キーワードについては、”user” と “mypost” に同じキーで検索用のカスタムフィールドを作り、それを'meta_query'=>array(array('key'=>キー));のように検索対象にしようと考えていますが、これも絞り込みできないでしょうか?または問題ありそうでしょうか?

    【3】
    >データのうち一番数が多くなるのが post かと思いますが

    なるほど!たしかに仰る通りですね。ただWP_QueryWP_User_Queryの2つにわけてしまうと、【4】のソートや、ページネーションが実装できないのではないかとも思っています。

    【4】
    >「他の視点」についてはちょっと意味が分かりませんでした。

    要はユーザーと “mypost” とをあわせて、最新順で表示したいということです。
    ユーザーならば登録日が新しい順で、”mypost” ならば投稿日が新しい順で、ということです。

    このソートをするにあたって、WP_QueryWP_User_Queryの2つを使った後でのソートになると、ユーザーは登録日を見て、”mypost” は投稿日を見て、それらについてソートし直す手間が必要かと思います。

    そこでユーザーの登録と同時に “user” を投稿すれば、2つを使わずにWP_Queryだけで'orderby'=>'date'とできます。
    これで “user” と “mypost” のいずれも投稿日でソートできますから、この手間が回避できるように考えています。

    以上長文で大変恐縮ではございますが、ご考察、ご返信頂けましたら幸いです。

    【1】
    おかしいとは書いていません。
    そう思わなかったというだけです。

    【2】
    'posts_per_page'=>10と指定して「投稿」と「カスタム投稿タイプ “user” 」を同時に検索した場合、ソート順によってユーザー情報が 11 件目以降であった場合、ユーザー情報は1つも取れません。
    10 件のうち 5 件がユーザー情報であった場合、投稿は 5 件しか取れませんが、そのような検索結果を何に使うのか想像が出来ません。

    検索用のカスタムフィールドを作るなどして検索結果に含まれるようにしたとしても、上記問題は同じです。

    【4】
    投稿とユーザー情報を入り混じらせて表示させるということでしょうか?
    それは私が考えていた前提とは異なりますので、私のこれまでの回答は全て無視いただいて結構です。

    >ソート順によってユーザー情報が 11 件目以降であった場合、ユーザー情報は1つも取れません。
    はい、ユーザーとカスタム投稿を混ぜて検索したかったので、これは問題ではないという認識でした。

    >そのような検索結果を何に使うのか想像が出来ません。
    Twitterでいうタイムラインのようなもので、たとえば「Aさんが”mypost”を投稿しました」とか「新しくBさんが登録しました」などを考えています。

    >投稿とユーザー情報を入り混じらせて表示させるということでしょうか?
    イエスです。上のタイムラインのような感じが前提でした。

    ありがとうございました。ズレがあったとはいえ、「>圧倒的少数のユーザーを入れてユーザー情報を抽出するコストを上げるくらいなら…」というアドバイスは特に参考になりました。やはり仰るようにWP_QueryWP_User_Queryの2つを使うこともアリかもしれません。

    引き続き検討したいと思います。ご返信に深く感謝申し上げます。

    >Bさんが登録しました
    についてスレ主が考えるの登録タイミング次第ではないでしょうか。
    最初の投稿をもって登録とするなら、カスタムフィールドで「最初の投稿にチェックを入れる」
    最初の投稿trueなら、the_authorが登録しました それ以外ならthe_authorが投稿しましたと表示するとかですまないんでしょうか。

    あと投稿者で分けるならカスタム分類の方が向いているのではなでしょうか。
    people、Bobの例が、codexにあります。

    投稿する人がどこまでやってくれるかとかできるかとかが付いて回りそうですが。
    どこまで自動化できるんだろう。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「「ユーザー情報」を「カスタム投稿タイプ」として管理する方法の問題点について」には新たに返信することはできません。