WordPress のテーマを Obscure に変更しました

2010年4月29日

wp.vicuna のスタイルも1年くらい続いて、自分的に飽きが来てしまったのと、来たる WordPress 3.0 のリリースに合わせる感じでリニューアルしてみました。

これまでのは割とシンプルな構成にしていたのですが、今回は見た目的な部分もきれいなテーマを使ってみようということで、海外で配布されていた Obscure というテーマを採用しました。

Ajax を使った動的なページ構成で、これまでとはかなり違った印象のテーマですね。これの改造についてもメモがてら記しておこうと思います。

トップページのスライドショーの使い方

説明書が分かりづらいんですが、指定したカテゴリーに属する記事で、適切に設定してやるとスライドショーに画像が表示されるようになります。

本来なら、テーマの各種設定を行う Obscure Options の画面内の Featured Gallery Option にてカテゴリを選択してやれば良いはずなのですが、上手く動かなかったので、テーマディレクトリにある functions.php に追記。

<?php
function option_featured_catname() {
    return 'lightnovel'; #ここにカテゴリスラッグを書く
}
add_filter('pre_option_obs_settings_featured-catname', 'option_featured_catname');
?>

指定したカテゴリ内にある最初の画像、またはカスタムフィールドの image_value の値を使って、スライドショーが実行されます。

サムネイル画像の指定

スライドに使用される画像および、各記事のトップページで使われるサムネイルは、カスタムフィールドの image_value に指定した画像が使用されます。

ここで注意するのは、サムネイルを作成するのに使われているスクリプト TimThumb.php の仕様である「サムネイルとして表示できる画像はスクリプトを呼び出したドメインと同一の絶対パスにて記述する」 ((たとえば https://www.u-1.net/wp-content/uploads/2010/04/51ugU-DPuGL.jpg なら image_value には /wp-content/uploads/2010/04/51ugU-DPuGL.jpg と記述する必要がある)) ことですね。

これについてはテーマディレクトリにある index.php を改造して、image_value の値が URL であり、かつ自サイト内の画像である場合は、ホスト名の部分を取り除いてパス部分だけを渡してやるような処理を functions.php 内に記述しそれを通してサムネイルを出力するように変更しました。

<?php
#ホスト名を取り除いてパスだけ返す
function thumbnail_replace_sitename ($image) {
	$url = 'https://www.u-1.net';
	$theme_directory = get_option('template_directory');
	$noimage_url = $theme_directory.'/images/no-image-medium.jpg';
	if ($image === '') {$image = $noimage_url;}
	$image = str_replace($url, '', $image);
	return $image;
}
?>

サムネイルを表示する部分のソースは、

<img src="<?php bloginfo( 'template_directory' ); ?>/timthumb.php?src=<?php echo thumbnail_replace_sitename(get_post_meta( $post->ID, "image_value", true )); ?>&amp;w=598&amp;h=280&amp;zc=1" border="0" alt="<?php the_title(); ?>" />

のようになっています。

日本語リソース環境下で英語表記を使いたいとき

各種メニューの表記は英語ベースで行うようにしました。英語リソースを放り込むよりも、それを実現するプラグインがあったので、それを使いました。

  • 日本語版WordPressの曜日・月表記を英語にする方法 スタッフブログ 香川県 ホームページ制作会社 WEB CONSULTING FEEL
  • 月別アーカイブが年と表示されるのを回避

    ただし、これだけでは月別アーカイブの表記が 2010年 April のようになるので、さらにコアファイルの一部を書き換えます。

    /wp-includes/general-template.php の

    $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);

    $text = sprintf(__('%1$s, %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);

    のように変更しました。コンマが一個入るだけで変わるとか、変な感じですが……。

    フッターの難読化を解除する

    フッターを編集しようとしたら BASE64 でエンコードされたデータが入っていただけでこりゃ困ったってなったのですが、少し探してみたらそれを復号してくれるサイトがあったので、それで得られたソースで置き換えました。

    Trackback と Pingbackの表示

    なぜかコメントだけ表示され、Trackback と Pingback が表示されないテーマだったので、それを表示するようにしました。

    comments.php に手を入れ、コメント表示部分の前に Trackback などの表示スペースを作成しました。

    <?php $pings_count = pings_count();if ($pings_count === 0 ) : ?>
    <h2 class="comment-head">No Trackback to <?php the_title(); ?></h2>
    <?php elseif($pings_count === 1): ?>
    <h2 class="comment-head">One Trackback to <?php the_title(); ?></h2>
    <?php wp_list_comments('type=pings&callback=wp_custmized_pings'); ?>
    <?php else: ?>
    <h2 class="comment-head"><?php echo $pings_count ?> Trackbacks to <?php the_title(); ?></h2>
    <?php wp_list_comments('type=pings&callback=wp_custmized_pings'); ?>
    <?php endif; ?>
    <h2 class="comment-head"><?php if(comments_open()) { comments_number('No Response to ', '1 Response to ', '% Responses to ' ); the_title(); } else { echo 'COMMENTS ARE CLOSED'; } ?></h2>
    <?php if ( have_comments() ) : ?>
    <ol class="comment-list">
    	<?php wp_list_comments('type=comment&callback=wp_threaded_comments'); ?>
    </ol>
    

    ここで、Trackback などの数を求める関数 pings_count() を functions.php 内に追加しておきます。

    <?php
    	function pings_count() {
    		global $id;
    		$comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));
    		$pings_count = count($comments_by_type['pings']);
    		return $pings_count;
    	}
    ?>
    

    pings_count() はここだけでなく、各所のメタ情報で Trackback の数を表示するのにも使っています。

    抜粋部分の表示

    スライドショーで使用されている内容の抜粋は、オリジナルは limit-post が使われているのですが、日本語対応していないので、日本語対応版を使用しました。

    また、本文の抜粋も同様に limit-post が使用されていたのですが、個人的な好みで、ここは を使用しています。WP Multibyte Patch が利用可能な日本語版ではこちらの方が柔軟に設定できるでしょう。

    また、続きを読むリンクも加工可能になっていたので、これまた functions.php に追記しました。

    <?php
    function new_excerpt_more($post) {
    	return '... [<a href="'. get_permalink($post->ID) . '">' . '<span class="read-the-rest">Read more</span>' . '</a>]';	
    }	
    add_filter('excerpt_more', 'new_excerpt_more');
    ?>
    

    Head Cleaner を有効にする

    Head Cleaner でヘッダ部分の整形を行っているのですが、 header.php 内に記述されている の位置が、JavaScript のロード部分よりも前にあり、効かなかったので位置を変更しヘッダ部分の head タグ終了の直前へ移動しました。

    利用プラグイン変更

    関連記事を表示するためのプラグインを、WordPress Related Posts から Yet Another Related Posts Plugin に変更しました。

    アーカイブを表示するためのプラグインを、PS Auto Sitemap から wp-mosquito に変更しました。


    と、こんな感じでカスタマイズをしていきました。他にも細かい部分はありますが、 CSS とかの記述については気合いで乗り切ったというか(笑)

    テーマを変更したおかげか、プラグインを変更したおかげか、MySQL へ発行するクエリの数が結構減ったのは良かったかも勘違いで増えていた……。気持ち重いときもあるけれど、そこはこれからもこつこつ改良していくということで、しばらくはこのテーマにお世話になりそうです。

    装いも新たになりましたが、やることは変わりありませんので、これからもよろしくお願いします。