こんにちは
投稿検索用の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_Query
とWP_User_Query
の2つにわけてしまうと、【4】のソートや、ページネーションが実装できないのではないかとも思っています。
【4】
>「他の視点」についてはちょっと意味が分かりませんでした。
要はユーザーと “mypost” とをあわせて、最新順で表示したいということです。
ユーザーならば登録日が新しい順で、”mypost” ならば投稿日が新しい順で、ということです。
このソートをするにあたって、WP_Query
とWP_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_Query
とWP_User_Query
の2つを使うこともアリかもしれません。
引き続き検討したいと思います。ご返信に深く感謝申し上げます。
>Bさんが登録しました
についてスレ主が考えるの登録タイミング次第ではないでしょうか。
最初の投稿をもって登録とするなら、カスタムフィールドで「最初の投稿にチェックを入れる」
最初の投稿trueなら、the_authorが登録しました それ以外ならthe_authorが投稿しましたと表示するとかですまないんでしょうか。
あと投稿者で分けるならカスタム分類の方が向いているのではなでしょうか。
people、Bobの例が、codexにあります。
投稿する人がどこまでやってくれるかとかできるかとかが付いて回りそうですが。
どこまで自動化できるんだろう。