WordPressのユーザーごとに月別のアーカイブを作る

公開日: 

wp_140131

WordPressのauthor.phpでユーザー毎のアーカイブページを作成していると、サイドバーに、そのユーザーの月別のアーカイブリンクを作りたくなりました。
で、色々と検索しても、なかなか自分の欲しい情報がありませんでした。面倒くさいので、皆さんはそのような事はしないのか、私のやり方が悪いのか…。
いずれにしても、自分へのメモも兼ねて残しておこうと思います。

まず、ユーザーごとに月別アーカイブページはデフォルトのパーマリンクでは対応しており、【URL/?author=1&m=201401】のような形で取得できます。それをカスタムパーマリンクで表示できるようにします。
こちらのサイトを参考にしました。

function.phpに以下のコードを記述します。

/*
* カスタムパーマリンク
*/
function add_author_monthly_archive_rule($rules) {
$newrules = array();
$newrules[‘author/([^/]+)/([0-9]{4})/([0-9]{2})/?$’] = ‘index.php?author_name=$matches[1]&year=$matches[2]&monthnum=$matches[3]&paged=$matches[4]’;
return $newrules + $rules;
}
add_filter(‘rewrite_rules_array’,’add_author_monthly_archive_rule’);
// 変数idを追加して、WordPressが認識できるようにする
function wp_insertMyRewriteQueryVars($vars)
{
array_push($vars, ‘id’);
return $vars;
}
// ルールを追加するときはflush_rules()を忘れないように
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_filter(‘query_vars’,’wp_insertMyRewriteQueryVars’);
add_filter(‘init’,’flushRules’);

これでおそらく【URL/author/authorid/2014/01/】という形で表示できるようになると思います。

次に、ユーザーごとの月別アーカイブのリンクを作成します。
sidebar.phpなどリンクを張りたい箇所のテンプレートに以下のコードを記述します。あくまで、自作のコードなので、間違ってたら教えください。

$author = get_user_by( ‘slug’, get_query_var( ‘author_name’ ) );
$all_posts = get_posts(array(
‘posts_per_page’ => -1,
‘author’ => $author->ID
));
$posts_monthly = array();
foreach ($all_posts as $single_post) {
$y = mysql2date(‘Y’, $single_post->post_date);
$m = mysql2date(‘m’, $single_post->post_date);
$tmp_array = array(‘year’=>$y, ‘month’=>$m);
if (!in_array($tmp_array, $posts_monthly)) {
$posts_monthly[] = $tmp_array;
}
}
$show_html = ‘<ul>’;
foreach ($posts_monthly as $monthly) {
$show_html .= ‘<li>’;
$show_html .= ‘<a href=”‘.get_author_posts_url($author->ID).$monthly[‘year’].’/’.$monthly[‘month’].’/”>’;
$show_html .= sprintf(“%04d年%02d月”, $monthly[‘year’], $monthly[‘month’]).'</a>’;
$show_html .= ‘</li>’;
}
$show_html .= ‘</ul>’;
echo $show_html;

これで、月毎のアーカイブリンクが出来るはずです。
今回は、ショッピングモールのサイトを作成しているので、店舗ごと(ユーザーごと)にアーカイブを作りたかったので、実装してみました。
とりあえず、現状は問題なさそうですが、もし不具合あれば追って修正していきます。

WordPressに関する本はこちら

シェアありがとうございます

  • このエントリーをはてなブックマークに追加
  • Pocket

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  • プロフィール

    みたやんです。様々なWebシステムの開発に携わってきました。ICTに関する困りごとなら何なりとお問い合わせください。

    似顔絵はかでる工房様に作成していただきました。

PAGE TOP ↑