こんにちは
投稿者別のカテゴリー/タグアーカイブページはデフォルトで用意されています。
下記のような URL でアクセスできます。
投稿者別のカテゴリーアーカイブページ:
(サイトアドレス)/?author=(ユーザー ID)&cat=(カテゴリー ID)
(サイトアドレス)/author/(ユーザー名)/?cat=(カテゴリー ID)
投稿者別のタグアーカイブページ:
(サイトアドレス)/?author=(ユーザー ID)&tag=(タグのスラッグ名)
(サイトアドレス)/author/(ユーザー名)/?tag=(タグのスラッグ名)
またも迅速な解答ありがとうございます。これで計三度お世話になっていますね。本当に感謝しております。
ご教示の通りのURLで目的のページにはたどり着けました。しかしこの場合、カテゴリーごとにarchive.phpを作成し、リンクはそこに追加するといった形にするしかないのでしょうか。
(サイトアドレス)/category/(カテゴリースラッグ)
の記述でカテゴリアーカイブページが表示されるのですが、このページ内に著者のリンクを貼り、それを踏むことで
(サイトアドレス)/author/?cat=(この部分はcategoryslugと同一)
にジャンプ(もしくは同ページ内でソート)するようにしたいのです。
「日記」カテゴリアーカイブページでで著者名「A」を選択した場合、「Aの書いた日記カテゴリに属する記事を一覧表示」し、「随筆」カテゴリアーカイブページで著者名「A」を選択した場合、「Aの書いた随筆カテゴリに属する記事一覧を表示し」…といった具合に、今現在見ているアーカイブページに合わせてソートできれば良いなと考えています。
初心者故にしどろもどろ、真意の分かりにくい長文とは存じますが、何卒お力添えを賜りたく存じます。
下記コードで、カテゴリーアーカイブページにおいて投稿者毎のカテゴリーアーカイブページのリンクを表示することができます。
<?php
if ( is_category() ) {
$category = get_queried_object();
$users = get_users();
foreach ( $users as $user ) {
$text = "{$user->display_name}の書いた{$category->name}カテゴリーに属する記事一覧を表示";
echo '<p><a href="' . esc_url( get_author_posts_url( $user->ID ) . '?cat=' . $cat ) . '">' . esc_html( $text ) . '</a></p>';
}
}
?>
archive.php(または category.php)の適当な位置に記述してみてください。
わざわざタグまで…ありがとうございます。求めていたのはこれです。
早速archive.phpに追加したところ、問題なく表示されました。しかし、”〜の書いた”、”カテゴリー一覧に属する記事の一覧を表示”の文面が長かったため、差し出がましくこちらで手を加えようとしたところエラーとなりました。
文言は載せず、A / B / C / D / E … という風に表示したいのですが、どのように変更すれば良いでしょうか。
段に文言を消し、{$user->display_name}のみではエラーが発生します。
重ね重ねお世話になりますが、まだお知恵をお貸しください。
段に文言を消し、{$user->display_name}のみではエラーが発生します。
ダブルクォーテーション(”)で括ってください。
$text = "{$user->display_name}の書いた{$category->name}カテゴリーに属する記事一覧を表示";
↓
$text = "{$user->display_name}";
または
$text = $user->display_name;
返信が遅れて申し訳ありません。完璧にできました!!
呑み込みの悪い初心者に数日間も手間を取らせて申し訳なく思います。
本当にありがとうございました!
追記:
投稿者別カテゴリーアーカイブへのリンクは完璧に晴れたのですが、投稿者別タグアーカイブリンクが上手くいかずまた困っています…。
<?php
if ( is_tag() ) {
$tag = get_queried_object();
$users = get_users();
foreach ( $users as $user ) {
$text = “{$user->display_name}”;
echo ‘<p>ID ) . ‘?tags=’ . $tags ) . ‘”>’ . esc_html( $text ) . ‘</p>’;
}
}
?>
いただいたコードを参考に、このように改造して適用してみましたが、リンクは現れるもののリンク先が単なる投稿者アーカイブページとなります。URL末尾は ?tags= となっており、タグIDを取得できていないようです。
ためしにタグにスラッグを割り振ってみましたが、なんの効果も得られませんでした。一度解決済みとした手前非常に恥ずかしいのですが、まだご教示願えれば幸いです…。
tag パラメータはスラッグ名なので $tag->slug を指定します。
<?php
if ( is_tag() ) {
$tag = get_queried_object();
$users = get_users();
foreach ( $users as $user ) {
$text = $user->display_name;
echo '<p><a href="' . esc_url( get_author_posts_url( $user->ID ) . '?tag=' . $tag->slug ) . '">' . esc_html( $text ) . '</a></p>';
}
}
?>
お返事が遅くなってしまい申し訳ありません。
頂いたタグを適用させたところ、完璧に作動しました!長々と付き合って頂き、ありがとうございます!!何のお返しもできないのが心苦しいですが…。これでようやく運営できます。本当に本当にありがとうございました。