「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
RelatedEntriesプラグインの改造
拙著「ブログ簡単パワーアップMovable Typeスーパーカスタマイズテクニック」の中で、「RelatedEntries」というプラグインを紹介しています。
このプラグインは、エントリー間の関連付けを設定して、エントリーに関連する他のエントリーを一覧表示できるようにするものです。
このプラグインに対して要望がありましたので、改造方法を紹介します。
1.すべてのBlogから関連するエントリーを取り出したい
RelatedEntriesプラグインの標準の動作では、エントリーと同一のブログからのみ関連するエントリーを取り出します。
しかし、複数のBlogを管理している場合、それらすべてのBlogから関連するエントリーを取り出したい場合もあります。
その場合は、RelaatedEntries.plの以下の2箇所を書き換えます。
・183行目
書き換え前:{ blog_id => $blog_id },
書き換え後:{},
・221行目
書き換え前:my $entry_count = MT::Entry->count({ blog_id => $blog_id });
書き換え後:my $entry_count = MT::Entry->count();
2.タイトル順に並べ替えて出力する
RelatedEntriesプラグインの標準の動作では、関連するエントリーは日付順に並べ替えて出力します。
ただ、これをタイトル順に変えたいという場合もあります。
それには、RelaatedEntries.plの34行目~48行目を以下のように差し替えます。
・差し替え前
# get attributes $lastn = $args->{'lastn'} or $lastn = 0; $sort_order = $args->{'sort_order'}; if ($sort_order ne 'ascend' && $sort_order ne 'descend') { $sort_order = $blog->sort_order_posts; } # load related entries my @related_entries; &load_related_entries($entry->id, \@related_entries); if ($sort_order eq 'ascend') { @related_entries = sort { $a->created_on <=> $b->created_on } @related_entries; } else { @related_entries = sort { $b->created_on <=> $a->created_on } @related_entries; }
・差し替え後
# get attributes $lastn = $args->{'lastn'} or $lastn = 0; $sort_order = $args->{'sort_order'}; if ($sort_order ne 'ascend' && $sort_order ne 'descend') { $sort_order = $blog->sort_order_posts; } my $sort_by = $args->{'sort_by'}; $sort_by = '' if ($sort_by ne 'title'); # load related entries my @related_entries; &load_related_entries($entry->id, \@related_entries); if ($sort_by eq 'title') @related_entries; } else { @related_entries = sort { $b->title cmp $a->title } @related_entries; } } else @related_entries; } else { @related_entries = sort { $b->created_on <=> $a->created_on } @related_entries; } }
これにより、MTEntriesRelatedEntriesタグに「sort_by」というアトリビュートが追加されます。
「sort_by="title"」とすると、エントリーのタイトルで並べ替えられるようになります。それ以外の場合はエントリーの日付順で並べ替えられます。
また、「sort_order」アトリビュートと併用して、昇順/降順を切り替えることもできます。