Wordpress投稿画面のins,delの修正 – XHTML準拠とdatetimeを日本時間に

2008.06.01

画像 - Wordpress投稿画面のins,delの修正 – XHTML準拠とdatetimeを日本時間に

Wordpress投稿画面のクイックタグにあるinsdelを使うと、世界標準時間でタグが生成されますので、日本時間に修正しました。どこにも情報がなかった (※あったけど内容が消えてる) のであげてみます。

それと、insdelが必ずPタグで括られる問題を修正しました。

せっかく直したので活用するために、ins,delのデータタイム要素をCSSで表示させます。

ins delのdatetimeを日本時間に修正

とっても気になっていたのですが、Wordpressの投稿クイックタグを使ってinsdelを生成すると、投稿時間にずれが生じています。

生成される形式

<ins datetime="2008-06-01T10:10:39+00:00"></ins>

生成された形式を見るとわかりますが、日時表記は国際標準のISO 8601準拠しています。

datetime=”2008-06-01T10:10:39+00:00″一番最後の+00:00は、世界標準時間を表しています。投稿された時間は世界表時間に合わせているようです。

日本はGMT+09:00ですので、これに合わせて修正します。

修正箇所

wp-includes/js/quicktags.js 27行目

var now = new Date();
var datetime = now.getUTCFullYear() + '-' +
zeroise(now.getUTCMonth() + 1, 2) + '-' +
zeroise(now.getUTCDate(), 2) + 'T' +
zeroise(now.getUTCHours(), 2) + ':' +
zeroise(now.getUTCMinutes(), 2) + ':' +
zeroise(now.getUTCSeconds() ,2) +
'+00:00';

修正後

var now = new Date();
var datetime = now.getFullYear() + '-' +
zeroise(now.getMonth() + 1, 2) + '-' +
zeroise(now.getDate(), 2) + 'T' +
zeroise(now.getHours(), 2) + ':' +
zeroise(now.getMinutes(), 2) + ':' +
zeroise(now.getSeconds() ,2) +
'+09:00';

ins del タグがXHTML準拠するように内部を修正

insタグを使うと不正なXHTML形式になる問題も修正しました。

insは、その場所によってブロック要素としてもインライン要素としても使えるタグですが、Wordpressで記事として投稿すると、自動修正機能でインライン要素として判断されて、pタグで括られてしまいます。

例えば、こういう場合

<ins>
  <p>追記の内容</p>
</ins>

Wordpressに投稿されると、自動修正されます。

<p>
   <ins>
     <p>追記の内容</p>
   </ins>
</p>

ブロック要素のinsをPタグが囲む形に修正されてしまいました。これは、設定の「不正な XHTML 構文を自動的に修正する」のチェックを外しても同じですので、内部のコードを修正しました。

修正箇所

wp-include\formatting.php 66行目

	$allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
 // 該当部分を書き換え
	$allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|ins|del)';
	$pee = preg_replace('|<ins([^>]*)>|i', "<ins$1>", $pee);
	$pee = str_replace('</ins>', '</ins>', $pee);
	$pee = preg_replace('|<del([^>]*)>|i', "<del$1>", $pee);
	$pee = str_replace('</del>', '</del>', $pee);
 // if ($br) { の前に上の4行を入れる
	if ($br) {

ins,delタグの要素をCSSで表示させる

せっかくinsに正しく要素がくっついてくるようになったので、それをサイトに反映させるために、CSSで要素を表示させます。

これは追記です。

insの要素となっているdatetimeをCSSのcontentプロパティを使って表示させています。

CSSはこんな感じで書いてます。

ins{
	display: block;
	margin: 10px 0;
	background: #EFEFEF;
	border: #999 1px dotted;
	padding: 10px 20px;
	text-decoration:none;
	}
ins:before {
 	display: block;
	content: "\8ffd\8a18  - (" attr(datetime) ")";
	text-align: left;
	font-size: 85%;
}

擬似要素を使っているのでIE6では「追記…」部分が表示されません。

対策として、本文との区別がつくようにボーダーで囲んでボックスで表示しています。

Recommend!

PHPによるWebアプリケーションスーパーサンプル 第2版 PHPによるWebアプリケーションスーパーサンプル活用編 第2版 jQueryで作る Ajaxアプリケーション CakePHPガイドブック CakePHP ポケットリファレンス

TrackBack URL
このエントリのリンクを作成

Trackback + Pingback:1

ins要素の修正。[更新] - Pinkish-Diamond**

ピンバック from 2009/02/25

[...] Wordpress投稿画面のins,delの修正 – XHTML準拠とdatetimeを日本時間に [...]

Comments: 1

/263 kimura 08-06-19 (木) 19:24

kimura

はじめまして。
これは!!なんと!かゆいトコロに手が届く記事なのでしょう!!
ちょうどWPでinsタグを挿入したら、なんか付加されるなー。。。と思っていたので、タイムリーに参考になりました!
ありがとうございますー!

Comment Form

スタイル指定用の一部の HTMLタグが使用できます。