著作権表示の年号を自動更新するプラグイン V1.1 for WordPress
先日公開した、WordPress で著作権表示の年号(西暦表示)を自動更新するプラグイン wp-copyright を、リアルタイム版に変更しました。

変更箇所は、著作権表示の年号の最終年を、最新の公開記事の投稿年ではなく、ページ表示時のタイムスタンプから取得するようにしました。ご利用のサーバのタイムスタンプに狂いがなければ年が明けたと同時に著作権表示の年号が切り替わります。
プラグインのダウンロードは下記のリンクからどうぞ。
著作権表示の年号を自動更新するプラグイン for WordPress
WordPress で、著作権表示の年号(西暦表示)を自動更新するプラグインです。

最初の公開記事の投稿年と最新の公開記事の投稿年(V1.1 はページ表示時刻より年を取得)を取得し、著作権表示の年号として表示します。単一年の時と複数年の時で表示を下記のように切り替えます。
- 単一年の時:ex. 2007
- 複数年の時:開始年と最終年をハイフンで表示 ex. 2005-2007
1.プラグインのダウンロード
下記のリンクよりプラグインアーカイブ wp-copyright.zip をダウンロードしてください。
- wp-copyright.zip(V1.0)
- wp-copyright.zip(V1.1 最終年をリアルタイムに取得)
2.プラグインのインストール
プラグインアーカイブを解凍し、中にある wp-copyright.php を wp-content/plugins ディレクトリにアップロードします。
アップロード後、ブログ管理画面の「プラグイン」より「Copyright」の「有効化」をクリックして緑色にしてください。

3.使用方法
このプラグインでは下記のタグで著作権表示用の年号を取得します。
<?php wp_get_copyright_year(); ?>
設定例は、
<p>Copyright © <?php wp_get_copyright_year(); ?> <?php bloginfo('name'); ?> All rights reserved.</p>
で、冒頭のスクリーンショットのような表示にすることができます。
2007.12.30
V1.1を追加しました。
2008.01.01
V1.1のリンクを修正しました。
WordPress でステータスコード 404(Not Found)を返却するエラーページを作る
WordPress のサイトで、「指定された URL が存在しない場合、テーマ(テンプレート)で用意した 404 エラーページ(404.php)の内容を返却します」というようなことが関連書籍等に記されていますが、サーバの設定によっては 404 エラーページを表示したにもかかわらず、HTTP レスポンスにステータスコード 200(OK)を付与してしまうケースがあります。
また、「指定された URL が存在しない場合」についてもバリエーションがあり、例えば、WordPress が解釈できるクエリー文字列が付与され、かつ存在しない URL であれば、適正なサーバの設定を行っても 404 エラーページが表示されない可能性が高いです。
このエントリーでは、指定された URL が存在しない場合、可能な限り 404 エラーページを返却させると同時に、スクリーンショットのように HTTP レスポンスのステータスコードに 404( Not Found)を返却する方法を紹介します。

この内容は 2.1.x から、先日リリースされた WordPress 2.2 まで確認しています。また内容について認識不足・認識誤り等ありましたらご指摘ください。適宜修正したいと思います。
1.ステータスコード 200 と 404 について
基礎知識として、HTTP レスポンスのステータスコード 200(OK)は「リクエストは成功」を意味しますので、404 エラーページを返却する場合は「リクエストURIと一致するリソースが見つけられなかった」ことを意味する 404(Not Found)を付与する必要があります。
ちなみに 404 は 4xx レスポンス(クライアントエラー)に含まれます。
2.ステータスコード 404 を返却する・対処その1(.htaccess の作成)
下記の内容を .htaccess の先頭に記述します。
ErrorDocument 404 /index.php?error=404
ドキュメントルート以外の場所に WordPress をインストールしている場合は、 "/" の前にドキュメントルートからのディレクトリを記述します。
下記のようにした場合は、エラーページの URL によって若干動作が異なります。
ErrorDocument 404 /404.php
「WordPress標準ガイドブック―導入&基本操作からフルチューンまで」では、クエリーによる設定(前者)が推奨されています。
![]() | WordPress標準ガイドブック―導入&基本操作からフルチューンまで マクラケン 直子 WordPress Japan 毎日コミュニケーションズ 2006-09 売り上げランキング : 14469 Amazonで詳しく見る by G-Tools |
3.ステータスコード 404 を返却する・対処その2(テーマ修正)
.htaccess をアップロードしてエラーの動作を確認したところ、存在しない URL を指定すると 404.php がハンドリングされるようになりました。しかしながら、例えばデフォルト設定の個別ページやカテゴリーページの URL の末尾の数字に、存在しない ID を指定した場合は、そのテンプレートに記述したエラー処理の内容が表示されます。
例えば、個別記事の URL(デフォルト)は、末尾に "?p=記事番号" というクエリーが付与されますが、
http://user-domain/?p=10000
と、記事が存在しない URL を指定した場合は、404.php が起動されるのではなく、正しいクエリー文字が URL に含まれていると判断してシングルポスト(single.php)がハンドリングされます。
次に、起動されたシングルポストのテンプレートが下記の構造になっていると仮定します。
<?php get_header(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
:
(記事がある場合はここに記述されたテンプレートが展開)
:
<?php endwhile; else: ?>
:
(記事がない場合はここに記述されたテンプレートが展開)
:
<?php endif; ?>
<?php get_footer(); ?>
つまり、記事が存在しない ID が付与された正しいクエリーの URL で、上記の構造になっているテンプレートでは、「記事がない場合」の部分(赤色)が実際に処理されることになります。
ここには2つの問題があります。
- テンプレートを正常に処理しているので、ステータスコード 200(OK)を返却する
- 404 エラーであるにもかかわらず 404 エラー用テンプレートがハンドリングされない
この事象は、アーカイブ(archive.php)やページ(page.php)も同様です。アーカイブとして認識されるクエリーが URL に付与されると、アーカイブテンプレート内のエラー処理が起動します。
ステータスコード 404 を返却したいのはもちろんですが、できればエラーページについてはエラーとなる URL に関わらず、一意のページ、つまり 404.php に処理を委ねた方が良い場合もあるのではないでしょうか(例えば 404 エラーページをカスタマイズしたい場合)。
この認識が間違っていないという前提で、下記にそれぞれの対処案を示します。
3.1 ステータスコード 404 を付与する
テーマファイルに含まれる、
- シングルポスト(
single.php) - アーカイブ(
archive.php) - ページ(
page.php)
の先頭に、下記の青色の内容を追加します。
<?php if (!have_posts()) {
header("HTTP/1.1 404 Not Found"); } ?>
<?php get_header(); ?>
:
この設定は、処理すべき記事が存在しない場合、ステータスコード 404 を付与し、その後テンプレート後方に出現するエラー処理(前出リストの赤色部分)が実施されます。
3.2 404 エラー用テンプレートをハンドリングする
ここでは2つの方法を提示していますが、基本的に3.2.1を実施してください。
3.2.1 テンプレートを修正する(推奨)
3.1 項の修正内容と一部重複しますが、テーマファイルに含まれる
- シングルポスト(
single.php) - アーカイブ(
archive.php) - ページ(
page.php)
の先頭に、下記の青色の内容を追加します。
<?php if (!have_posts()) {
header("HTTP/1.1 404 Not Found");
include (TEMPLATEPATH . '/404.php');
return; } ?>
<?php get_header(); ?>
:
この行を加えることで、処理すべき記事が存在しない場合は、テンプレートの通常処理を実行する前にレスポンスヘッダに 404 を付与し、404.php に処理を移します。
3.2.2 ソースコードを修正する(非推奨)
今回のカスタマイズは、WordPress のソースコードを解析していて、先にこの方法に辿りつき、それからテンプレートに記述する案が思いつきました。
この方法を用いればテンプレートの修正をせずに、404.php の内容を表示することができます。が、これは覚え書きレベルですので、実際には3.2.1項の修正を推奨します。
/wp-includes/classes.php を任意のエディタで開き、下記の青色部分を追加します。
function handle_404() {
global $wp_query;
// Issue a 404 if a permalink request doesn't match any posts. Don't
// issue a 404 if one was already issued, if the request was a search,
// or if the request was a regular query string request rather than a
// permalink request.
if ( (0 == count($wp_query->posts)) && !is_404() && !is_search() && ( $this->did_permalink || (!empty($_SERVER['QUERY_STRING']) && (false === strpos($_SERVER['REQUEST_URI'], '?'))) ) ) {
$wp_query->set_404();
status_header( 404 );
nocache_headers();
} elseif( !have_posts() ) {
$wp_query->set_404();
status_header( 404 );
} elseif( is_404() != true ) {
status_header( 200 );
}
}
4.まとめ
WordPress でエラーとなる URL でリクエストされた場合に、正しいレスポンスを返却するためには、.htaccess の設定と、テンプレートの修正が必要です。どの部分の修正がどこに適用されるかについては下記の表を参考にしてください。
| 存在しない URL | あり得るクエリーの URL | ||
|---|---|---|---|
| .htaccess なし |
テンプレート修正 なし | サーバ依存 | 200 OK |
| テンプレート修正 あり | サーバ依存 | 404 Not Found | |
| .htaccess あり |
テンプレート修正 なし | 404 Not Found | 200 OK |
| テンプレート修正 あり | 404 Not Found | 404 Not Found | |
「サーバ依存」の部分は、自宅サーバとレンタルサーバで結果が異なったため、このような表記にしています。
5.その他
エラーページの表示に、常に 404.php を利用するのであれば、各テンプレートの構造は(おおざっぱですが)、
<?php if (!have_posts()) {
header("HTTP/1.1 404 Not Found");
include (TEMPLATEPATH . '/404.php');
return; } ?>
<?php get_header(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
:
(記事がある場合はここに記述されたテンプレートが展開)
:
<?php endwhile; endif; ?>
<?php get_footer(); ?>
と、エラー処理を省略したフォーマットで統一できそうな気がします。
また上記までの修正で、ステータスコード 404 が付与されるようになりますが、レスポンスヘッダ全体を眺めた場合、X-PingBack ヘッダが付与されることついては懸念が残ってます。
WordPress に Movable Type 風の「Syndicate this site」を表示する
WordPress に、Movable Type の以前のバージョンで表示されていた RSS フィードのリンク「Syndicate this site」を表示する方法です。ご質問を頂きましたので、大変遅くなりましたが本エントリーにて紹介致します。
スクリーンショットは WordPress Default テーマへの設定例です。
1.サイドバーの修正
1.1 WordPress Default テーマの場合
テーマエディタでサイドバーの編集画面を開き、最後の方に下記の青色部分を追加します。
<?php } ?>
<li class="syndicate"><a href="<?php bloginfo('rss2_url'); ?>">Syndicate this site (XML)</a></li>
</ul>
</div>
1.2 当サイト配布テーマの場合
テーマエディタでサイドバーの編集画面を開き、最後の方に下記の青色部分を追加します。
</li>
<li style="margin-top:25px"><a href="<?php bloginfo('rss2_url'); ?>">Syndicate this site (XML)</a></li>
<li><a href="http://www.koikikukan.com/"><img src="<?php echo get_settings('home'); ?>/wp-content/themes/koikikukan3/images/koikikukan.gif" alt="koikikukan" title="koikikukan" width="128" height="22" /></a></li>
</ul>
</div>
</div>
2.スタイルシートの設定
WordPress Default テーマの場合、テーマエディタでスタイルシート編集画面を開き、最後の方に下記のスタイルを設定します。
.syndicate {
margin-top: 25px;
}
WordPress における日付/時間の表示とフォーマット変更方法
WordPress への記事投稿日の日付および時間の表示方法と、日付/時刻フォーマットを変更するカスタマイズをご紹介します。
このエントリーのきっかけは、当サイトで配布しているテーマに表示される記事投稿時間を24時間表記に変更する方法についてのご質問だったのですが、それだけでは何なので一通り調べてみました。
1.概要
テンプレートの記事投稿時間を表示したい位置に
<p><?php the_time() ?></p>
を設定すると、下のように時刻情報に変換されてページに表示されます。
<p>21:07:51<p>
2.テンプレートタグ
日付表示用テンプレートタグには次の2つがあります。
2.1 the_time
記事の投稿時間を表示します。書式は次の通りです。
<?php the_time('format') ?>
format には2項以降に示す「表示フォーマット」を設定します。
カッコ内を省略すると、4項の管理画面に設定した表示フォーマットが適用されます。
2.2 the_date
記事の投稿時間を表示します。書式は次の通りです。
<?php the_date('format', 'before', 'after', echo) ?>
the_time との違いは、
- 同一日に複数記事がある場合は最初の記事にだけ表示
- 日付/時間の前後に表示するテキストの指定が可能
- PHPの変数として取得可能(その場合、表示されません)
が挙げられます。特に一つ目の振る舞いが大きな違いですので、使用する場所に応じて使い分けると良いでしょう。
format は3項以降に示す「表示フォーマット」を設定します。before は日付/時間の前に表示するテキスト、after は日付/時間の後に表示するテキスト、echo は、日付/時間を表示する場合は true、変数として取得する場合は false を設定します。
変数として取得する場合のサンプルを以下に示します。
<?php $my_date = the_date('', '', '', false); ?>
カッコ内を全て省略すると、4項の管理画面に設定した表示フォーマットが適用されます。
管理画面に設定した表示フォーマットを適用し、なおかつ日付/時間の前後にテキスト(ここでは p 要素をサンプルとして設定)を表示したい場合は、次のようにします。
<?php the_date('', '<p>', '</p>') ?>
このタグのパラメータに前後のテキストが設定できる理由は、仮にタグの外側に HTML タグを設定した場合、(同一日付のエントリーが複数あると)このタグが表示されないことがあり、外側に設定した HTML タグが残ってしまいます。これを避けるためにパラメータとしてタグを設定できるようにしています。
3.表示フォーマット
表示フォーマットは、時間を表示するフォーマット文字(後述)と、任意の文字列で構成されます。
1項のように the_time を利用して
<p>21:07:51</p>
という表示にしたい場合は、時分秒のフォーマット文字「h」「i」「s」と、それぞれを区切る文字「:」で、
<p><?php the_time('h:i:s') ?></p>
というフォーマットをパラメータに設定します。
4.フォーマット設定方法
フォーマットは次のいずれかの方法で設定することができます。
- 管理画面の [オプション] - [一般設定] - [日付のフォーマット/時間のフォーマット]
- テンプレートタグに直接記述
「テンプレートタグに直接記述」というのは、2.1項の例では
<?php the_time('h:i:s') ?>
という風に、カッコ内にパラメータとして表示フォーマットを設定することを指します。
管理画面での設定箇所は下のスクリーンショットの通りです。「日付のフォーマット:」フィールドの内容が the_date、「時刻のフォーマット:」フィールドの内容が the_time に対応しています。

フィールドに設定されたフォーマットを利用するには、2項に記した通り、テンプレートタグの the_date 、the_time のパラメータが空きであることが条件となります。
当サイトで配布しているテーマでは日付フォーマットを直接テンプレートに埋め込んでますので、管理画面から設定できるようにするには、テンプレートの下記の部分をそれぞれ変更してください。
日付表示(変更前) *1
<?php the_date('Y.m.d', '<p class="date">', '</p>') ?>
日付表示(変更後)
<?php the_date('', '<p class="date">', '</p>') ?>
時間表示(変更前)
Posted at <?php the_time('h:i') ?>
時間表示(変更後)
Posted at <?php the_time() ?>
5.フォーマット文字一覧
PHP:date より、よく使われそうなフォーマット文字を抜粋し、下記にまとめてみました。
なお、日本語版 WordPress の場合、表中の月表示および曜日表示は日本語になります(英語表記にする場合の変更方法は「WordPress の月・曜日を英語表記にする」を参照)。
| 単位 | フォーマット文字 | 意味 | 表示例 |
|---|---|---|---|
| 年 | Y | 4桁の数字 | 1999, 2003 |
y | 2桁の数字 | 99, 03 | |
| 月 | m | 2桁の数字 | 01 - 12 |
n | 1桁または2桁の数字 | 1 - 12 | |
F | フルスペル | January - December | |
M | 3文字の省略形式 | Jan - Dec | |
| 日 | d | 2桁の数字 | 01 - 31 |
j | 1桁または2桁の数字 | 1 - 31 | |
| 曜日 | D | 3文字の省略形式 | Mon - Sun |
l | フルスペル | Sunday - Saturday | |
| 午前/午後 | a | 小文字 | am / pm |
A | 大文字 | AM / PM | |
| 時 | h | 2桁の数字・12時間表示 | 01 - 12 |
g | 1桁または2桁の数字 12時間表示 | 1 - 12 | |
H | 2桁の数字・24時間表示 | 00 - 23 | |
G | 1桁または2桁の数字 24時間表示 | 0 - 23 | |
| 分 | i | 先頭にゼロをつける | 00 - 59 |
| 秒 | s | 先頭にゼロをつける | 00 - 59 |
以下は年月日・時分秒の設定早見表です。
| 年 | 月 | 日 | 設定例 | 表示 | |||
|---|---|---|---|---|---|---|---|
| 4桁 | Y | 2桁 | m | 2桁 | d | Y/m/d | 2007/01/01 |
| 0なし | j | Y/m/j | 2007/01/1 | ||||
| 0なし | n | 2桁 | d | Y/n/d | 2007/1/01 | ||
| 0なし | j | Y/n/j | 2007/1/1 | ||||
| 2桁 | y | 2桁 | m | 2桁 | d | y/m/d | 07/01/01 |
| 0なし | j | y/m/j | 07/01/1 | ||||
| 0なし | n | 2桁 | d | y/n/d | 07/1/01 | ||
| 0なし | j | y/n/j | 07/1/1 | ||||
| 時 | 分 | 秒 | 設定例 | 表示 | |||
|---|---|---|---|---|---|---|---|
| 12時間表記・2桁 | h | 2桁 | i | 2桁 | s | h:i:s | 01:02:03 |
| 12時間表記・0なし | g | g:i:s | 1:02:03 | ||||
| 24時間表記・2桁 | H | H:i:s | 13:02:03(01:02:03) | ||||
| 24時間表記・0なし | G | G:i:s | 13:02:03(1:02:03) | ||||
6.参考・関連リンク
2007.03.13 追記
テンプレート改修に伴い、4項の記述を修正しました。
*1:2007.03.13 以前にテンプレートをダウンロードされた場合、メインページ/アーカイブページについては下記の変更を行ってください。
日付表示(変更前)
<p class="date"><?php the_time('Y.m.d') ?></p>
日付表示(変更後)
<p class="date"><?php the_date() ?></p>


