Top > WordPress > カスタマイズ > その他 [全て開く]
2007年12月30日

著作権表示の年号を自動更新するプラグイン V1.1 for WordPress

December 30,2007 1:50 AM
Tag:[, , ]
Permalink

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

著作権表示の年号を自動更新するプラグイン

変更箇所は、著作権表示の年号の最終年を、最新の公開記事の投稿年ではなく、ページ表示時のタイムスタンプから取得するようにしました。ご利用のサーバのタイムスタンプに狂いがなければ年が明けたと同時に著作権表示の年号が切り替わります。

プラグインのダウンロードは下記のリンクからどうぞ。

著作権表示の年号を自動更新するプラグイン for WordPress
Comments [0] | Trackbacks [1]
2007年12月12日

著作権表示の年号を自動更新するプラグイン for WordPress

December 12,2007 2:02 AM
Tag:[, , ]
Permalink

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 &copy; <?php wp_get_copyright_year(); ?> <?php bloginfo('name'); ?> All rights reserved.</p>

で、冒頭のスクリーンショットのような表示にすることができます。

2007.12.30
V1.1を追加しました。

2008.01.01
V1.1のリンクを修正しました。

Comments [8] | Trackbacks [1]
2007年5月21日

WordPress でステータスコード 404(Not Found)を返却するエラーページを作る

May 21,2007 2:25 AM
Tag:[, , ]
Permalink

WordPress のサイトで、「指定された URL が存在しない場合、テーマ(テンプレート)で用意した 404 エラーページ(404.php)の内容を返却します」というようなことが関連書籍等に記されていますが、サーバの設定によっては 404 エラーページを表示したにもかかわらず、HTTP レスポンスにステータスコード 200(OK)を付与してしまうケースがあります。

また、「指定された URL が存在しない場合」についてもバリエーションがあり、例えば、WordPress が解釈できるクエリー文字列が付与され、かつ存在しない URL であれば、適正なサーバの設定を行っても 404 エラーページが表示されない可能性が高いです。

このエントリーでは、指定された URL が存在しない場合、可能な限り 404 エラーページを返却させると同時に、スクリーンショットのように HTTP レスポンスのステータスコードに 404( Not Found)を返却する方法を紹介します。

ステータスコード 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標準ガイドブック―導入&基本操作からフルチューンまで
マクラケン 直子 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 Found200 OK
テンプレート修正
あり
404 Not Found404 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 ヘッダが付与されることついては懸念が残ってます。

Comments [0] | Trackbacks [1]
2007年4月16日

WordPress に Movable Type 風の「Syndicate this site」を表示する

April 16,2007 12:11 AM
Tag:[, , ]
Permalink

Syndicate this siteWordPress に、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;
}
Comments [0] | Trackbacks [0]
2007年3月13日

WordPress における日付/時間の表示とフォーマット変更方法

March 13,2007 2:10 AM
Tag:[, , , ]
Permalink

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_datethe_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.フォーマット文字一覧

PHPdate より、よく使われそうなフォーマット文字を抜粋し、下記にまとめてみました。

なお、日本語版 WordPress の場合、表中の月表示および曜日表示は日本語になります(英語表記にする場合の変更方法は「WordPress の月・曜日を英語表記にする」を参照)。

出力される日付文字列の書式
単位フォーマット文字意味表示例
Y4桁の数字1999, 2003
y2桁の数字99, 03
m2桁の数字01 - 12
n1桁または2桁の数字1 - 12
FフルスペルJanuary - December
M3文字の省略形式Jan - Dec
d2桁の数字01 - 31
j1桁または2桁の数字1 - 31
曜日 D3文字の省略形式Mon - Sun
lフルスペルSunday - Saturday
午前/午後 a小文字am / pm
A大文字AM / PM
h2桁の数字・12時間表示01 - 12
g1桁または2桁の数字
12時間表示
1 - 12
H2桁の数字・24時間表示00 - 23
G1桁または2桁の数字
24時間表示
0 - 23
i先頭にゼロをつける00 - 59
s先頭にゼロをつける00 - 59

以下は年月日・時分秒の設定早見表です。

年月日の設定早見表
設定例表示
4桁Y2桁m2桁dY/m/d2007/01/01
0なしjY/m/j2007/01/1
0なしn2桁dY/n/d2007/1/01
0なしjY/n/j2007/1/1
2桁y2桁m2桁dy/m/d07/01/01
0なしjy/m/j07/01/1
0なしn2桁dy/n/d07/1/01
0なしjy/n/j07/1/1
時分秒の設定早見表
設定例表示
12時間表記・2桁h2桁i2桁sh:i:s01:02:03
12時間表記・0なしgg:i:s1:02:03
24時間表記・2桁HH:i:s13:02:03(01:02:03)
24時間表記・0なしGG:i:s13: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>
Comments [0] | Trackbacks [0]
Now loading...
List of "その他"
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Category Monthly Archives
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.1
 
List Me!