サイドバーにBoPoMoFoのサムネイル画像を表示してみた

サイドバーの右上に、フォトログBoPoMoFoのサムネイルとリンクを表示してみました。
その方法をメモ代わりにエントリーしておきます。

フォトログとこのブログのWordPressは1つのデータベースにインストールしており、ブログ側から直接フォトログのテーブルにアクセスしデータを抽出しています。

最新のエントリーのタイトルを表示する(写真上のテキストリンク)

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$results = $wpdb->get_results($wpdb->prepare("
	SELECT post_title, guid /*タイトルとguidの値を取り出す*/
	FROM wp_posts /*フォトログの投稿データテーブル*/
	WHERE post_type = 'post' /*投稿データ*/
	AND post_status = 'publish' /*公開されたエントリー*/
	ORDER BY post_date DESC /*日付降順*/
	LIMIT 1 /*抽出件数*/
"));
foreach ($results as $value) {
	print('<li><a href="'.$value->guid.'">'.$value->post_title.'</a></li>');
}
?>

WordPress のデータベース操作用のクラス関数wpdbについての解説と、データベースへのアクセス方法は下記のページが参考になりました。

» 関数リファレンス/wpdb Class – WordPress Codex 日本語版
» WordPressからデータベースに直接アクセスする‐ webOpixel

ここでは、フォトログ側のテーブル接頭辞を「wp_」に設定してインストールしたものとして説明します。

投稿データは「wp_posts」というテーブルに格納されており、「post_type」の値は「post」となっています。
記事タイトルは「post_title」、記事URLは「guid」フィールドにあります。
さらに、このテーブルには、下書きとして保存された投稿データも共存していますので、公開された投稿データを抽出するには「post_type」の値が「publish」のものを指定してやる必要があります。

最新のギャラリーの最初の写真を表示する(写真上)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$results = $wpdb->get_results($wpdb->prepare("
	SELECT guid /*画像のURLを取り出す*/
	FROM wp_posts /*フォトログの投稿データテーブル*/
	WHERE post_type = 'attachment' /*添付ファイル*/
	AND menu_order = 1 /*ギャラリーの表示順序*/
	ORDER BY post_date DESC /*日付降順*/
	LIMIT 1 /*抽出件数/*
"));
foreach ($results as $value) {
	$value->guid = ereg_replace("\.jpg", "-160x120.jpg", $value->guid); /*画像名をサムネイル画像名に置換*/
	print('<img src="'.$value->guid.'" />');
}
?>

ギャラリー機能を使ってアップした画像のデータは、投稿データと同じ「wp_posts」というテーブルに格納されており、「post_type」の値は「attachment」となっています。
さらに、ギャラリー作成時に設定した表示順序は「menu_order」というフィールドに格納されています。
「guid」には画像のフルパスが格納されていますので、これをそのまま書き出してやれば画像を表示することができますが、今回はサムネイルを表示したいのでファイル名の部分を正規表現で置換します。
サムネイルのファイル名は、元の画像ファイル名の末尾に「-160×120」がついていますので、「.jpg」の箇所を「-160×120.jpg」と置き換えました。

下の写真は、全画像からランダムで表示しており、こちらはAND条件を外し、「ORDER BY rand()」と変更するだけでOKです。

こちらの記事もどうぞ