一般にブログは記事本文がいきなり表示され、タイトル一覧に相当するのは「最新の投稿」のみのようです。で、過去記事をみるには、時期指定で移動するか、カテゴリーで移動するかです。カテゴリーで移動する場合にひとつのカテゴリーに含まれる記事が増えるとスクロールしてみるにも大変。
そこで、カテゴリーに含まれる記事のタイトル一覧を表示する方法を作ってみました。
ソフトとしては、xoops上のwordpress0.33です。wordpressはもともと単体のパッケージであり、これを
nobunobu氏がxoopsに移植したものなので、構造が複雑。中身をみて、まともに理解するのは大変そう。むしろDB構造をみて新規にブロックを作るほうが良いかも知れないとも考えたのですが、さらに手を抜けないか調べた末、考えたのが今回の方法です。
カテゴリー一覧に表示される記事数をクリックされると、記事全文を表示するかわりに、タイトル一覧を表示し、さらにそのタイトルをクリックすると該当記事単体の全文が表示されるようにしました。
修正箇所プログラムは以下の2本のみ。
・wordpress/blocks/wp-catogories.php カテゴリー一覧を表示
・wordpress/themes/default/index-template.php 記事本文の表示
修正内容は以下のとおりです。
wordpress/blocks/wp-catogories.php中のfunction b_wp_categories_showの一部です。
一部掲載上の都合でオリジナルソースと変えてありますが、動作は確認してあります。
if ($block_style == 0) {
// Simple Listing
ob_start();
block_style_get($wp_num);
echo "<ul class='wpBlockList'>\n";
// ● 2007-12-19 changed begin
echo "<li><i>全文link (タイトルlink)</i></li>";
wp_list_cats(
"sort_column=$sorting_key&sorting_order=$sorting_order&optioncount=$with_count");
echo "</ul>\n";
//$block['content'] = ob_get_contents();
$temp_lists = ob_get_contents();
ob_end_clean();
$block['content'] = preg_replace_callback(
'/(<li><a.href=")([^<>"]+)("[^<>]+">)([^<>"]+)(<\/a>.\()(\d+)(\)<\/li>)/',
create_function(
'$matches',
'return "<li><a href=\"".$matches[2]."\">".$matches[4]."</a>'
.' (<a href=\"".$matches[2]."&titlelist=".rawurlencode($matches[4])."'
.'\">".$matches[6]."</a>)</li>\n";'
),
preg_replace('/[\n\t]/m','',$temp_lists)
);
// ● 2007-12-19 changed end
} else {
wordpress/themes/default/index-template.phpの一部
<div id="wpMainContent">
<?php // ● 2007-12-19 inserted this block ---------------------------------
if($_GET['titlelist']) {
echo " ".urldecode($_GET['titlelist'])."<ul>";
}
// ● 2007-12-19 -----------------------------------------------------
?>
<?php if ($posts) { foreach ($posts as $post) { start_wp(); ?>
<?php // ● 2007-12-19 inserted this block ---------------------------------
if($_GET['titlelist']) {
echo "<li><a href='".get_permalink()."'>"
.substr($post->post_date,0,11).$post->post_title."</a>";
continue;
}
// ● 2007-12-19 -----------------------------------------------------
?>
<?php the_date('','<h2>','</h2>'); ?>
途中省略
<?php include(dirname(dirname(dirname(__FILE__))) . '/wp-comments.php'); ?>
</div>
<?php }
if($_GET['titlelist']) echo "</ul>";// ● 2007-12-19 inserted
} else { // end foreach, end if any posts ?>