umbrella_process blog

‘WordPressカスタマイズ’ カテゴリーのアーカイブ

[WordPress] 今見ている記事と同じカテゴリの最新記事を表示する

2009年07月07日

関連する記事を出力するプラグインは色々存在するが、シンプルに今見ている記事と同じカテゴリの最新記事を表示させる方法を考えてみた。

  • 記事に複数のカテゴリが存在する場合、それぞれのカテゴリの最新記事を出力。
  • 最新記事のリストは、今見ている記事を除いて出力。

で、こんな感じで表示できました!

<?php $categories = get_the_category();
foreach($categories as $category):
$related_posts = get_posts('category='.$category->cat_ID.'&exclude='.$post->ID);
if($related_posts): ?>
<h2><?php echo $category->cat_name; ?>カテゴリの最新記事</h2>
<ul>
<?php foreach($related_posts as $related_post): ?>
<li><a href="<?php echo get_permalink($related_post->ID); ?>"><?php echo $related_post->post_title; ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; endforeach; ?>

各カテゴリの記事はget_posts()の初期値の5件まで表示されます。

[WordPress] 他サイトのRSSを読み込んで表示

2009年05月20日

WordPressはPHPでできているので、他サイトのRSSを読み込ませてサイドバーなどに新着記事を表示するのも簡単だ…と思っていたら意外と手こずったのでメモ。

いくつかプラグインも配布されているようなのだが、受託案件でデザイン的な制約があったので自作することとする。WordPressではfetch_rss()wp_rss()get_rss()という関数が用意されていて、楽に実装できるようだ。それぞれ、fetch_rss()が配列で取得、wp_rss()が<ul>付きでリスト表示、get_rss()が<ul>なしでリスト表示というのが主な違い。

使い方は以下ページで分かりやすく解説されています。

WebTecNote – [WP]wordpressでRSSを取得して表示

詰まったのは日時を表示させようと思ったため。wp_rss()とget_rss()のどちらも記事の投稿日時は表示されない。そのためfetch_rss()でRSSデータを配列で取得して表示してみるが、こんな風に表示される。

2009-05-13T08:26:08+09:00

これではちょっと困る。調べてみたところこの日時の表示形式はW3CDTFというそうで、この形式を解釈するparse_w3cdtf()という関数もあるみたい。なーんだ。

というわけで、関数にしてみました。functions.phpに書いておけばテンプレート中で使えます。

function custom_get_rss($feed,$maxitems){
$rss = fetch_rss($feed);
$items = array_slice($rss->items, 0, $maxitems);
if (empty($items)) {
echo '<li>No Items</li>';
} else {
foreach ( $items as $item ){
echo '<li><a href="' . $item['link'] . '" title="' . $item['title'] . '>';
echo $item['title'];
echo '</a>';
if($item['dc']['date']){
echo '<span class="date">' . date('Y年m月d日',parse_w3cdtf($item['dc']['date'])) . '</span>';
}
echo '</li>';
}
}
}

タネさえ分かってしまえば実に便利。
(上記サンプルはRSSの種類を考慮していないので読み込むRSSによっては動かない場合もあります。ご了承ください。)

プラグインにオリジナル機能を追加する

2008年12月05日

WordPressで欲しい機能のためにプラグインを導入したものの、微妙に要件を満たしてないという問題が発生。

受託開発のサイトの場合、様々な要望に対応するため、wp_tag_cloud()のようにHTMLタグも吐き出されるテンプレートタグでは不便なことがある。そういう場合はPHP関数形式のタグがあれば便利なのだが、特にプラグインではPHP関数形式のテンプレートタグがない。

3時間悩んだ末の解決策が、プラグインファイルのクラスを継承して新しいクラスを作り、PHP関数形式で値を返すメソッドを作成するという苦肉の策。

class 苦肉の策クラス extends プラグインで実装されているクラス {
	function 勝手に追加したメソッド() {
		処理
	}
}

$変数に入れます = new 苦肉の策クラス();

function メソッド呼び出し用関数() {
	global $変数に入れます;
	return $変数に入れます->勝手に追加したメソッド();
	// ↑今回はIDを配列で返すようにしてみました。
}

これでとりあえず必要な関数はできたので、めでたくテンプレートの中で使えるようになったわけだが…
上記のクラスもテンプレートに書いてあるという不格好さ。

まぁとりあえずこうしておけば、プラグインがアップデートしたときでも、もとになるクラスが消えてなければ大丈夫だと思うのだが。もっとスマートなやり方がないもんかな。

【追記】

index.phpでうまくいったと思ったら、他のテンプレートではFatal error
もう少し考える必要がありそうだ。

【追記2】

結局プラグインファイルに上記のクラスを追記。何がいけないのか???

[WordPress] タグクラウドを便利にするプラグイン

2008年10月31日

Configurable Tag Cloud

タグクラウドの表示を細かく設定できるプラグイン。

タグの表示数、フォントカラーによる重みづけ、ソート順など様々な項目を管理画面から簡単に設定可能。

現在受託している開発案件でタグクラウドにタグごとの記事数を表示してほしいという要望があったため入れました。使い勝手は良好ですよ。

Simple Tags


↑この入力方法が欲しかった!del.icio.us風のクリックだけでタグが追加できる便利プラグインです。

その他、投稿中の単語から自動でタグを挿入する機能、関連タグ表示などがありますが、開発中の案件ですのでまだ効果は実感できず。いずれ使用感はレポートしようと思います!

[WordPress] Akismetプラグインを有効にする

2008年10月30日

WordPressはいいなーと思う大きな理由の一つが、強力なスパムブロックプラグインのAkismetが標準搭載されていること。別のWordPressサイトを1年運用してますが、完璧と言っていいはじきっぷりです。
ただ、このプラグインを利用するにはAPI keyの登録が必要。

API keyは、WordPress.comに登録すればメールで送られてきます。その後、頻繁にメールが来たりとかいうこともありませんので、安心して登録してAkismetを使ってください。ひとつのAPI keyで複数のブログのAkismetの有効化ができます。


API key入力画面

簡単ですね。

—-

いま上記の画像をアップロードしようとして気づいたのですが、最新のFlashだとFlashアップローダが動作してない?
いずれ修正されるでしょうけど。