Web、サーバ、ソフトウェア、バグ・脆弱性 などの情報を何人かで集まって書いていく IT/Web情報系ブログ

【WordPress】delとinsのdatetimeがUTCなのをJSTに直す

投稿日:   最終更新日:2016/02/11  投稿者:ktm@s

記事の加筆・修正がよくあるので、追記や訂正にinsやdelタグを使おうという事にした。
デフォルトのinsは下線が入っていて見栄えがイマイチなので以下のように修正した。

yy年mm月dd日 追記
追記のサンプル。
あの時のアレは実はああだったんざますよ。オホホホ。

デフォルトのクイックタグにあるinsやdelボタンを使うと、自動的にdatetimeにその時の時間を入れてくれて便利なのだが、そのdatetimeがどうやらUTCになっているようだ。
気持ち悪いのでここを修正する。

該当箇所の修正

ちゃんとバックアップは取ろう。
プラグインやfunction.phpに書いてもいいけど、このjsファイルを編集してボタン増やすのもありだよ。

該当のJavaScript

/wp-includes/js 内にquicktags.jsとquicktags.min.jsがある。

実際に読み込まれているのはquicktags.min.jsの方だが、一応quicktags.jsのほうも同様の修正をすればよいと思う。

修正(quicktags.js)

quicktags.jsの最後の方を見ると、693行目あたりからクイックタグボタンを押すと挿入されるタグがずらずらと書いてある。
ins,delの項目を見ると、_datetimeに時間が入っているのがわかる。

<del datetime="' + _datetime + '">

_datetimeで検索すると、132行目あたりから時間を作っているようだ

_datetime = (function() {
	var now = new Date(), zeroise;

	zeroise = function(number) {
		var str = number.toString();

		if ( str.length < 2 ) {
			str = '0' + str;
		}

		return str;
	};

	return now.getUTCFullYear() + '-' +
		zeroise( now.getUTCMonth() + 1 ) + '-' +
		zeroise( now.getUTCDate() ) + 'T' +
		zeroise( now.getUTCHours() ) + ':' +
		zeroise( now.getUTCMinutes() ) + ':' +
		zeroise( now.getUTCSeconds() ) +
		'+00:00';
})(),
qt;

最後に’+00:00′;とUTCからのズレを指定する箇所があるので、ここを’+09:00′;と変えてやればよい。

2016年02月08日 追記
勘違いがあった。
+09:00 は表記してる時間とUTC時間のズレを明示するだけのもので、実際にはT以降の日付を変えないといけないみたいだ。

何故か地方時でなくUTC固定(get.UTC~)で時間を取っているWordPress側がおかしそうだ。
get.~で地方時を取ってやればいい。
ソースを以下に書いておく。

_datetime = (function() {
	var now = new Date(), zeroise;

	zeroise = function(number) {
		var str = number.toString();

		if ( str.length < 2 ) {
			str = '0' + str;
		}

		return str;
	};

	return now.getFullYear() + '-' +
		zeroise( now.getMonth() + 1 ) + '-' +
		zeroise( now.getDate() ) + 'T' +
		zeroise( now.getHours() ) + ':' +
		zeroise( now.getMinutes() ) + ':' +
		zeroise( now.getSeconds() ) +
		'+09:00';
})(),
qt;

修正(quicktags.min.js)

実際に読み込まれているquicktags.min.jsを修正する。

quicktags.jsでやることは判っているので、+00:00で検索して+09:00に変更する。
更にgetUTC~からUTCを抜く。

変更後のソースを以下に置いておく。

b=new Date;return a=function(a){var b=a.toString();return b.length<2&&(b="0"+b),b},b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+"T"+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())+"+09:00"}();

修正後にアップロードすれば完成。

変更が反映されない場合 (追記)

2016年02月11日 追記
自分は普通に反映されて全く気づかなかったが、nk.が記事に追記するときにinsがデフォルトのまま入ってしまうということがあった。
load-scripts.phpがブラウザ側でキャッシュされていると、変更しても反映されないようだ。

2016/02/11 追記 by nk.
具体的な対処法を追記しておきます。
ブラウザ(chrome推奨)でふつーにWPにアクセスし、管理画面からなんでもいいので適当な記事の編集画面に移動し、post.phpを開きます。
そして右クリックからページのソースを表示します。すると新しいタブが開いてソースが表示されます。
そのソースでCtrl+Fを押して検索画面を開き、load-scriptsで検索します。
このブログでは2件ヒットしますが、設定によりけりでしょう。
そのヒットしたURLのうちURL引数にquicktagsとあるほうのリンクをクリックすると新しいタブでload-scripts.phpにアクセスできます。
そのload-scripts.phpのタブでF5を押して更新した後、そのタブで今度はHoursで検索すると、getUTCHoursかgetHoursのどちらかがヒットするはずです。getHoursがヒットした場合はうまくキャッシュが削除できています。
post-new.phpでも同様に、WPの管理画面から新規追加を開き、読み込んでいるload-scriptsを特定して更新すればよいです。
もしこれで何度か試しても(あるいはすべてのキャッシュを削除しても)getUTCHoursのままなら、ファイル編集のほうがうまくいっていないと思われます。

あとがき

今回はdelとinsのdatetimeをJSTにしたついでにinsタグにclassを付加したりした。

投稿の編集を行うpost.phpでは無事に反映されたが、新規投稿を行うpost-new.phpでは反映されていない。
読んでるものが違うのだろうか?

何にせよ今回は編集するときにしか使わないタグの修正なので、タスクに放り込んでおいて暇なときにでも調べて”追記”する。

2016年02月11日 追記
追記したので前項の追記を参照されたし。

- カスタマイズ ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事