Hatena::ブログ(Diary)

kanonjiの日記 RSSフィード

http://kanonji.info/blog/ 2013年2月頃に移転しました。

2012-07-24

WordpressのレンタルブログサービスWordpress.comが全然Wordpressじゃない件

ちょっと思いつきでブログを作りたくて、前から気になってたWordPress.com - Get a Free Blog Hereを使ってみた。Wordpressの開発会社が運営する、Wordpressを使ったブログサービスで、Wordpressならカスタマイズにもそこそこ慣れてるし、今回は自分で構築するほどじゃないと思ったので使ってみたら、予想外に全然Wordpressじゃなかったのです。

以下、wordpressなんだから色々出来るだろうとずっと思ってた自分が、使ってみて気がついたWordpress.comのダメな所です。気がついた順に書いていきます。

※Wordpress.comはまだ登録して3日くらい、実際に触ったのは数時間なので、見落としとか勘違いももしかしたらあるかもしれません。

プラグインのインストールが出来ない

いきなり、メインの要素がなくなりました。Wordpressをインストールしたら必ず入れるプラグインもいくつかあるのに、そもそもインストールが出来ません。当然自分で作ったプラグインも使えません。

テーマの改造が出来ない

プラグインと違ってテーマのインストールは出来ました。ただ、そのテーマをベースにちょっと変えてとかは出来ません。ロゴ画像とか背景画像や色とかテーマが管理画面からの変更に対応している部分*1は変えられるけど、htmlを書いたり変えたりというのは出来ない。

Wordpressのthe_date()やthe_time()で日付を英語で表示出来なくなったのでget_post_time()を使った - kanonjiの日記

Wordpressの記事ループの中で、最初や最後の記事とかを判別する - kanonjiの日記

当然テンプレートタグも書けなければ、function.phpにちょっとした関数を書いて使うことも出来ないので、こんなのを使う余地がない。

もしかして

テーマのインストールが出来るなら、予めfunction.phpに色々機能を書きまくったテーマを作って、テーマディレクトリに登録すれば自分のコードを使う事ができるかも?でも、登録するって事は他の人も使えちゃうって事だろうし、プラグインがダメって事は、プログラム上の制限は当然ありそうだけど。

パーマリンク設定が変更できない

パーマリンクは/2012/01/01/Slug/に固定されているようです。インストールする方のWordpresで言う所の日付と投稿名/%year%/%monthnum%/%day%/%postname%/です。

流石にこれはあるだろうと思っていて、メニューに項目が沢山あるので見逃してるのかなと思い/wp-admin/options-permalink.phpに直接アクセスしてみたらSorry, this is disabledと言われてしまいました。

Google Analyticsが使えない

小規模サイトなら多くのサイトで導入してると思うAnalyticsも使えません。どっかの掲示板で見かけたほんとかどうか分からない話によると、Wordpress.com全体で使ってるから個別には無理なんだとか。理由は兎も角、使えない事にはかわりありません。そもそも、テーマの改造が出来ないので、自分の使いたいJavaScriptすら置けないという。

一応WordPress › WordPress.com Stats « WordPress Pluginsというアクセス解析機能が提供されています。

ブログパーツや自作JavaScriptが使えない

書いてる途中に気がついて、既に書いてるけど、よく考えたらブログパーツや自作JavaScriptすら使えない。

どんだけガチガチなんだろう。

Tumblrの方がまだ自由度ある

多分Wordpress.comって結構前から運営されてるんだろうし、もしかしたらGoogle Analytics登場以前からかもしれない。だから、そういう新しいものについていけてないのかもしれない。Wordpressが持つ自由度の高いというイメージとは別に、やっぱり長くあるサービスだと、色々古くさくなるものなのかもしれない。

Tumblrはすごいシンプルだけど、少なくともテンプレートはhtml/cssレベルで改造できるし、たしかGoogle Analyticsも使えたはず。シンプルとはいえ新しめのサービスは対応してほしいところは対応してるって事なのかな。JavaScriptまで書けるかは分からないけど。

Wordpress.org > Tumblr  |超えられない壁|  Wordpress.com

柔軟性・自由度に関してはWordpress.comはかなり低いです。はてなダイアリーも出来ない事かなり多いけど、Wordpress.comも相当・・・。気軽にブログ作りたいなって思ったらTumblrがいいかな。Wordpress.comで作っちゃったのは、近いうちにTumblrで作り直してみたい。

*1:テーマが管理画面からの変更を想定して作られていれば、なのでテーマごとに変えられる部分は違うと思うし出来ないテーマもあると思う

2012-06-07

Wordpressの管理画面で現行バージョンを常に見れるようにする

<?php
function admin_footer_text($text){
    return sprintf('%s current version: %s', $text, get_bloginfo('version'));
}
add_filter('admin_footer_text', 'admin_footer_text');

Wordpressの管理画面のフッター部分に、Wordpressのバージョンを出します。functions.phpにでも書けば良いと思います。ほんとはテーマ変えても使えるように、プラグインの方が便利だけど、流石に4行のスニペットをプラグインにするのも大袈裟かもなのでやめときました。

動作の確認のため開発環境では、新しいバージョンが出ても更新しないで別途インストールしてます。すると、今見てるのがどのバージョンだか、分からなくなる事があるんですが、どのバージョンなのか管理画面のどこを見ても書いて無いので困りました。

ほんとはフッター右側に書いてあるんですが、なんかこれ、新しいバージョンが出ると「バージョン 3.3.1 を入手」のように動いてるバージョンを消して、最新版のバージョンしか表示してくれません。まったく意味が無い。ソースコード見たりすれば分からなくは無いんですが、いちいち面倒だし小さいことだけど割りとイラッとします。

wp-admin/update-core.php

さらに、Wordpress本体のバージョンを出さない事になんかこだわりめいたものを感じます。

Wordpress本体やプラグイン、テーマの更新状況や操作をまとめて出来る更新ページがあるんですが、ここにも古いバージョン番号は表示されません。

最新バージョンを動かしてる場合

f:id:kanonji:20120107050443p:image

動かしてるのが最新バージョンの場合は、フッター右側に常に出ているし、この更新ページでもバージョンが確認出来ます。

古いバージョンを動かしてる場合

f:id:kanonji:20120107050446p:image

更新ページとしてもフッター右側も、更新後になる最新バージョン番号だけ表示してます。

さらに、プラグインやテーマなら「現在お使いのバージョンは 2.5.3 です。2.5.4 に更新します。」といった書き方で、使っている古いバージョンも書いてあるのに、なぜか本体のバージョンだけは出してません。

環境

Wordpress3.1〜3.3.1辺り

書いた時期

2012-01-07頃。下書きのまま埋もれてたので引っ張り出し。5ヶ月前だし、最近のWordpressだと改善されてるかもしれないけど。最近Wordpress使ってないので分かりません。

2012-02-29

coreserverの共用SSLはWordpressのis_ssl()で判別できない

Wordpressプラグインについて調べていて、たまたまこの現象に行き当たりました。知りたかった事ではなかったけど、これはこれでメモしておきたい。

<?php
/**
 * Determine if SSL is used.
 *
 * @since 2.6.0
 *
 * @return bool True if SSL, false if not used.
 */
function is_ssl() {
	if ( isset($_SERVER['HTTPS']) ) {
		if ( 'on' == strtolower($_SERVER['HTTPS']) )
			return true;
		if ( '1' == $_SERVER['HTTPS'] )
			return true;
	} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
		return true;
	}
	return false;
}
http://svn.automattic.com/wordpress/tags/3.3.1/wp-includes/functions.php

Wordpressでは、このis_ssl()関数でhttpsなアクセスかどうかを判別してます。coreserverの共用SSLでは、この判別に使う$_SERVER['HTTPS']が、たとえSSLでも存在しないという謎の仕様になっているようです。じゃぁ$_SERVER['SERVER_PORT']はというと、これもどういうわけか80になっています。

これで困る事として、とりあえずプラグインやテーマが読み込むJavaScriptやcssのパスが、httpになってしまい、httpsなページからhttpなリソースを読み込んでいるという警告が出てしまうという事があります。もちろんこれだけじゃなく、他にもあると思いますが。

あと、多分他のフレームワークとかCMSとかも、$_SERVER['HTTPS']を見てるものはいくつかあると思うので、coreserverの共用SSLをそのまま使おうとするとハマるかもしれない。

解決策は不明

今回は、たまたま気になって調べただけで、coreserverの共用SSLをWordpressで使いたいってわけじゃないので、解決策は調べてません。is_ssl()にフックが無いので、簡単には解決出来なさそうな気がしますが。

判別に使えそうなキー
["HTTP_VIA"]=>
  string(44) "1.1 ss1.coressl.jp:3128 (squid/2.5.STABLE14)"

ざっとvar_dump($_SERVER)を眺めると、$_SERVER['HTTP_VIA']が判別に使えそうです。自分のプログラムだったら、これを使ってどうとでも書けそうだけど、Wordpressに組み込まれた関数となると、やはりWordpress本体に手を入れないと難しそう。

その他の気になる点

coreserverは確か、独自SSLもオプションで使えたと思います。これが共用SSLと同じような動きをするかも、もしcoreserverで何かするなら確認しておきたいところ。

環境

coreserver
Apache1.3.37
php5.2.5
Wordpress
Wordpress3.3.1

2012-02-07

Wordpressに同梱されてるjQueryのバージョンを調べてみた

jQueryを使うWordpressプラグインを作っていて、動作条件を書くために、Wordpressに組み込まれてるjQueryのバージョンが気になりました。

WordpressjQuery
3.0〜3.0.61.4.2
3.1〜3.1.41.4.4
3.2〜3.2.11.6.1
3.3〜3.3.11.7.1

codexをざっと調べても見当たらなかったので、Wordpressのリポジトリから、ソースコードに書いてあるバージョンを確認して見ました。どうやら、Wordpressのバージョンの2桁目が上がるタイミングでjQueryのバージョンも変えている様です。3.0系の段階でjQuery 1.4.2と結構古かったので、2系は調べてません。

2011-07-11

Wordpressのthe_date()やthe_time()で日付を英語で表示出来なくなったのでget_post_time()を使った

Wordpressのテーマを作ったり編集してる際、エントリーの投稿日時を出力するテンプレートタグにはthe_date()the_time()を使います。この2つは、phpのdate()で使えるフォーマット文字列が使えると日付と時刻の書式 - WordPress Codex 日本語版などで説明されています。ところが、月を英語で出力するフォーマット文字列FMを使った所、何故か日本語で出力されました。

解決策

the_date()やthe_time()ではなく、get_post_time()を使う。日本語のCodexには載ってないので、英語のCodexです。

注意点

時間も出力できる

It does not display the time. To display the time of a post, use the_time().

Template Tags/get post time « WordPress Codex

こんな感じで、時間は出力しない的な事が書いてあったけど、Hisなど、時間用のフォーマット文字列を使えば時間も出ます。

echoが必要

Codexにはテンプレートタグと書いてありますが、echoが必要です。

<?php echo get_post_time('F.j.Y H:i:s'); ?>

こんな感じで使います。

phpやwordpressのバージョン

割とバージョンによって動きが違うかもしれない内容です。一番下に環境という項目で、実際に試したphpとwordpressのバージョンを書いてあります。

解説

the_date()やthe_time()は、内部でphpのdate()を使っていると思いきや、使ってません。管理画面で設定出来る、ブログの言語に合わせて、動きを変える様に作られてます。なので、日本語に設定してあるWordpressでは、月や曜日が日本語で出る様になってます。

フォーマット文字列the_date()/the_time()get_post_time()
DWed
l水曜日Wednesday
Sthth
F7月July
M7月Jul
aamam
AAMAM

影響がありそうなフォーマット文字列を試してみた所、こんな感じになりました。日にサフィックス*1を付けるS、午前午後を表すaAは、言語設定によらず変わらない様です。

ついで

記事ループの中で、同じ日付の記事が複数ある場合に、the_date()は1回しか日付を出力しません。同じ日の投稿はひとまとめの枠に表示する様なデザインを作る場合にはthe_date()ですが、そうでない場合はthe_time()を使います。

環境

Wordpress3.1.4
PHP5.2.6
MAMP1.7.2

*1:1st 4thなどのstやth