サポート » テーマ » 各種アーカイブページで投稿者別にソートしたい

  • 解決済 theokanemaru

    (@theokanemaru)


    無料テーマの「write」を利用しています。
    複数人でのサイト運営を考えており、カテゴリアーカイブページやタグアーカイブページにて投稿をauthor別で表示させたいと考えています。
    具体的には、「カテゴリ:日記」のアーカイブページにて、投稿者別ソート機能を持ったリンクをタイトル下に表示させ、ユーザーがいずれかのリンクをクリックした場合、「Aという著者の日記カテゴリに属する記事のみを表示」「Bという著者の日記カテゴリに属する記事のみを表示」と言った風に条件を分岐させたいと考えています。
    (ECサイトなどでよく見かける、ワンクリックで記事の絞り込みができる機能です)

    writeテーマはarchive.phpですべての一覧ページを管理しているようなので、ここに何か追記すれば実装は可能でしょうか?もしくは何かプラグインを導入した方が良いでしょうか。

    • このトピックはtheokanemaruが3ヶ月、 2週前に変更しました。

    ヘルプの必要なページ: [リンクを見るにはログイン]

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

    投稿者別のカテゴリー/タグアーカイブページはデフォルトで用意されています。
    下記のような 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>';
    	}
    }
    ?>

    お返事が遅くなってしまい申し訳ありません。
    頂いたタグを適用させたところ、完璧に作動しました!長々と付き合って頂き、ありがとうございます!!何のお返しもできないのが心苦しいですが…。これでようやく運営できます。本当に本当にありがとうございました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • このトピックに返信するにはログインが必要です。