サポート » テーマ » 「ユーザー別年別月別アーカイブリスト」の作成

  • 現在、社内の簡易的な日報をWPで作ろうということになり、試行錯誤しています。

    仕組みとしては、トップページでまずユーザーをクリックすると、ユーザーの記事一覧ページに飛び、そのページにて年別・月別のアーカイブリスト(リスト入れ子)を表示したいと考えています。
    つまり、選択したユーザの年別月別アーカイブです。

    年別月別アーカイブは作った(というかほぼコピペレベル)ことがあったので、いけると思っていたのが全然だめでした。
    どうググってもなかなか有用なヒントが得られず、どなたかお力を貸していただけないものでしょうか?

    ユーザー別年別月別アーカイブリストって、けっこう需要がある気がするんですが・・・どうなんでしょうか。興味のある方、ぜひアドバイスをお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • モデレーター gatespace

    (@gatespace)

    リライトルールを追加すれば可能です。

    http://www.warna.info/wp-content/uploads/2012/10/wordbench-chiba20121014.pdf

    Fumito MIZUNO

    (@php-web)

    社内日報であれば、
    デフォルトのパーマリンク形式で標準対応しているので、それを使えばよいのではないでしょうか。

    トピック投稿者 chiva

    (@chiva)

    gatespaceさん、MIZUNOさん、回答どうもありがとうございます。

    しかし、少し内容が違ったかもしれません・・・(というより私の方が理解してないだけの可能性もありますが。)

    もう少し具体的に書かせていただきます。
    パーマリンク設定が、現状以下のようになっております。
    /%author%/%year%/%monthnum%/%day%/%post_id%

    また、上記設定にしたことで、以下のような階層構造でページにアクセスすることはできております。
    ■ユーザーアーカイブ
    http://www.example.com/yamada/

    ■ユーザー年別のアーカイブ
    http://www.example.com/yamada/2014/

    ■ユーザー月別のアーカイブ
    http://www.example.com/yamada/2014/05/

    ■パーマリンク
    http://www.example.com/yamada/2014/05/45

    ただし、ユーザーごとの各年別月別アーカイブを表示させたいのに、現状だとサイドバーが共通のものになってしまって、現在のユーザーだけにソートされたアーカイブリストを表示させることができておりません。
    つまり、上記例の場合だとトップページ意外全部にyamadaさんの年別月別アーカイブを表示させたいのです。ほかの人の記事へのリンクは不要なのです。

    問題は「サイドバーの表示を変える」ということでした。
    こちら具体的な方法が全くわからず、困っております。

    ちなみにサイドバーの形としては、
    2010年
      01月
      02月
      03月
    2011年
      01月
      02月
      03月
    2012年
      01月
      02月
      03月

    というような、いわゆるリストタグの入れ子構造になっております。
    この形での出力が必須なのですが、私にはわかりませんでした。

    どなたかある程度具体案をお持ちの方か、過去に作成した経験のある方はおられませんでしょうか?
    よろしくお願いいたします。

    モデレーター gatespace

    (@gatespace)

    wp_get_archives で普通の日別アーカイブのリストを生成できます
    http://codex.wordpress.org/Template_Tags/wp_get_archives

    そのままだと投稿者別では無いので、予め投稿者のIDなりを取得した上で
    ‘getarchives_where’ あたりにフィルターフックすればいいんじゃ無いですかね?
    https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/general-template.php#L1227

    nobita

    (@nobita)

    こんにちは

    functions.php

    function get_author_posts_group_month() {
        global $authordata, $post;
    
        $authors_posts = get_posts( array( 'author' => $authordata->ID, 'post__not_in' => array( $post->ID ), 'posts_per_page' => -1 ) );
        $output        = '<ul style="list-style:none;">';
        $y             = '';
        $m             = '';
        $html = '<li style="padding-left:30px"><a href="%1$s">%2$s</a></li>';
    
        foreach ( $authors_posts as $key => $authors_post ) {
    
            preg_match( '!([0-9]+)-([0-9]+)-.*!', $authors_post->post_date, $args );
    
            if ( $y !== $args[1] ) {
                $output .= '<li>' . absint( $args[1] ) . '</li>';
            }
            if ( $m !== $args[2] ) {
                $output .= '<li>' . absint( $args[2] ) . '</li>';
            }
            $output .= sprintf( $html,
                                get_permalink( $authors_post->ID ),
                                apply_filters( 'the_title', $authors_post->post_title, $authors_post->ID )
                        );
    
            $y = $args[1];
            $m = $args[2];
        }
        $output .= '</ul>';
    
        return $output;
    }

    template

    <?php echo get_author_posts_group_month(); ?>

    のような感じでどうですか?

    月とか年にリンクが必要なら
    http://codex.wordpress.org/Function_Reference/get_month_link
    とかを見てください

    トピック投稿者 chiva

    (@chiva)

    皆さんありがとうございます。
    nobitaさんのものが近かったのですが、今回はマルチサイトにしてユーザごとにブログを生成して解決いたしました。
    本当は1ブログで簡潔させたかったので、心残りです。。。

    一応自己解決という形になったのですが、質問が僕のなかで解決できなかったんで、こういうときは解決済みにしない方がいいのでしょうか??

    nobita

    (@nobita)

    質問が僕のなかで解決できなかったんで、こういうときは解決済みにしない方がいいのでしょうか??

    自分の中で解決でになっていないなら、解決済みにする必要はありません。

    nobitaさんのものが近かったのですが、

    近いんだけど、ちょっとここが違うんだよ という部分を書き込んでください。:)

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「「ユーザー別年別月別アーカイブリスト」の作成」には新たに返信することはできません。