web-dev-qa-db-ja.com

著者のページにカテゴリ別に投稿を表示する

私は以下を使って著者のページを作成しました:

 <?php
  if(isset($_GET['author_name'])) :
  $curauth = get_userdatabylogin($author_name);
  else :
  $curauth = get_userdata(intval($author));
  endif;
 ?>

その後、標準のループで、その作者によって公開されているすべての投稿のタイトルが表示されます。私はそれらが属するカテゴリ(1、2または3)に従って投稿の表示を分離しようとしているので、私はを使ってみました

<?php query_posts('cat=1'); ?>

その投稿者だけでなく、私のブログ投稿もすべて表示されます。確かに何かが間違っています。

1回の投稿で複数のループがある場合はカスタムクエリを使用する必要があることはわかっていますが、単一の標準クエリを使用しても "cat"フィルタが機能しないため、少し失念します。

1
Sergio Majluf

作成者テンプレートを使用している場合は、作成者クエリパラメータを設定(設定)する必要はまったくありません。作成者ページに表示されているクエリオブジェクトに準備ができています。

さらに、あなたが持っているクエリを繰り返し処理し、カテゴリを抽出し、与えられたカテゴリに関連する投稿IDを配列の中に格納することによって、多数のクエリ(現在はカテゴリごとに一つ)を作成する必要性を避けることができます。最初の反復でカテゴリ名/ IDで割ったIDの配列を作成し(好きなものは何でも)、クエリを巻き戻し、投稿を繰り返し、新しく作成した配列の最初のカテゴリに一致しない結果を続ける(スキップする)カテゴリID(または名前)繰り返しますが、ループを巻き戻してから、新しい配列に含まれるカテゴリごとにループを繰り返し、現在のカテゴリの繰り返しと一致しない場合は投稿を続けます(スキップします)。

それを見るまではそれほど意味があるわけではなく、投稿を複数のカテゴリに分類する場合(カテゴリが複数のカテゴリにまたがって交差する可能性がある場合)は、もう少し複雑になります。現在のページ(それは明らかに完全な結果セットをソートしません。そのため、与えられたページはソートされますが、その全体的なソートは結果セットのすべてのページの合計を超えることはありません)。

もしあなたが上記の方法が便利に思えて、あなたが前述の問題に悩んでいないと思うなら、私は例を提供することを気にしません。

0
t31os

はるかに簡単な方法で解決しました

表示する必要があるカテゴリごとに1つのループがあり、クエリは次のように作成されます。

<?php query_posts('cat=1&author='.$curauth->ID;); ?>
1
Sergio Majluf