WordPress 投稿エディタに LightBox のコードを挿入

2007/08/19 日曜日 11:38 投稿者 zon

コア部分を変更するのであまり参考にしない方がいいと思います。

変更後のイメージは以下のようになります。

LightBox のコードを挿入

■バージョン:2.1.3
■変更ファイル:/wp-admin/upload-js.php

修正点その1

【変更前】116行目:

h += "<label for='link-file'><input type='radio' name='link' id='link-file' value='file' checked='checked'/> <?php echo attribute_escape(__('File')); ?></label><br />";

【変更後】file のチェックをはずして、その上に LightBox のラジオボタンを追加

h += "<label for='link-lightbox'><input type='radio' name='link' id='link-lightbox' value='lightbox' checked='checked' /> <?php echo attribute_escape(__('LightBox')); ?></label><br />";
h += "<label for='link-file'><input type='radio' name='link' id='link-file' value='file' checked='checked'/> <?php echo attribute_escape(__('File')); ?></label><br />";  

修正点その2

【変更前】236行目~241行目:

if ( 'none' != link )
	h += "<a href='" + ( 'file' == link ? ( this.currentImage.srcBase + this.currentImage.src ) : ( this.currentImage.page + "' rel='attachment wp-att-" + this.currentImage.ID ) ) + "' title='" + this.currentImage.title + "'>";
if ( display && 'title' != display )
	h += "<img src='" + ( 'thumb' == display ? ( this.currentImage.thumbBase + this.currentImage.thumb ) : ( this.currentImage.srcBase + this.currentImage.src ) ) + "' alt='" + this.currentImage.title + "' />";
else
	h += this.currentImage.title;

【変更後】LightBox を選択時、rel 属性に lightbox[post-id] を設定する処理を追加。ついでに、img タグに width、height、title 属性を設定する処理を追加

if ( 'none' != link ) {
	h += "<a href='"
	if ( 'file' == link )
		h += this.currentImage.srcBase + this.currentImage.src;
	else if ( 'page' == link )
		h += this.currentImage.page + "' rel='attachment wp-att-" + this.currentImage.ID;
	else if ( 'lightbox' == link )
		h += this.currentImage.srcBase + this.currentImage.src + "' rel='lightbox[" + this.postID + "]";
	h += "' title='" + this.currentImage.title + "'>";
}
if ( display && 'title' != display ) {
	h += "<img src='";
	if ( 'thumb' == display ) {
		imageThumb = new Image();
		imageThumb.src = this.currentImage.thumbBase + this.currentImage.thumb;
		h += imageThumb.src + "' width='" + imageThumb.width + "' height='" + imageThumb.height;
	} else {
		imageBase = new Image();
		imageBase.src = this.currentImage.srcBase + this.currentImage.src;
		h +=  imageBase.src + "' width='" + imageBase.width + "' height='" + imageBase.height;
	}
	h += "' alt='" + this.currentImage.title + "' title='" + this.currentImage.title + "' />";
} else {
	h += this.currentImage.title;
}

img タグの width、height、title 属性は、LightBox とは関係ないのですが、W3C XHTML1.0 valid を意識して、毎回設定しているのが面倒になったので、コア部分を変更するならと、ついでにやっておきました。

プラグインを駆使してなんとかなるものなら、コア部分を変更せずになんとかしたいものですが分からないのです。

2.0系でこのカスタマイズを行いたければ、inline-uploading.php 辺りを変更すればいいのかと思って、ソースをざっくり追ってみましたが、2.1.3 の仕組みとは大きく変わっていたので追うのが面倒になりました。2.0系をカスタマイズしたい人は、ほとんど参考にならないと思います。

結論から言ってしまうと、Smart Update Pinger の影響のようです。プラグインを無効にすれば正常にタイトルが反映されました。

私の使っているバージョンは、2.1.3 なので、サポートされているバージョンで Smart Update Pinger を使っている人は、この症状は出ないのではないかと思います。
※ざっくりソースを流し読みしただけの予想です。

ちなみに、Smart Update Pinger のサポートされているバージョンは、配布元をみると1.5系か2.0系と書かれているようです。
※自信がないので、それっぽく書かれているところを引用。

WordPress 1.5/2.0 Support

If you’re still using WordPress 1.5.x, you must use the older version of Smart Update Pinger. This version will not work properly on WordPress 2.x, so make sure you have the right version of Smart Update Pinger.

WordPress Plugins: Smart Update Pinger, Jerome’s Keywords; Enhance your blog tool

原因

Smart Update Pinger(日本語版) の 161行目の、$post_title = ""; が悪さをしているような気がします。
2.0系までは、ファイルをアップロードする際のタイトルに、imgtitle を使っていたみたいですが、2.1系からは post_title を使っているので、Smart Update Pinger で post_title を初期化することで、post_title が設定されていないと判断されているみたいです。

対処

ファイルアップロード時は、Smart Update Pinger のプラグインを読み込まないようにしました。
※正確には読み込むが、if文で処理を通さないようにしました。

smart-update-pinger.php の最初と最後に以下のコードを追加

if (false === strstr($_SERVER["SCRIPT_NAME"], '/wp-admin/upload.php')) :
~ (中略) ~
endif;

初めから smart-update-pinger.php 自体を読み込まないような方法があるような気もするのですが、プラグインの読み込み時に振り分ける方法が分からないし、処理を追っかけるのが面倒なので上記のような安易な対処しました。

この対処で問題ないかどうかは不明ですが、今のところ正常に動いているようです。

日本語のサブドメインを使ってみる

2007/08/11 土曜日 3:24 投稿者 zon

しばらく前に Yahoo! JAPAN で異常なほど日本語のドメインが上位に表示されていたことがありました。まだ名残が残っているのか、それともこれで落ち着いたのかは分かりませんが、今もその当時ほどではないにしても、それなりに効果はあるようです。

メリット、デメリットはあるもののとりあえず試してみたいと思いながらも、特に新しいドメインを取ってまで公開するようなサイトはなかったので傍観していたのですが、この前の記事にも書いた 『宅建の試験に合格するぞぉ』 を日本語サブドメインを使って公開することにしました。

宅建の試験に合格するぞぉ
http://宅建.zontheworld.com (http://xn--09s63f.zontheworld.com)

日本語ドメインへの変換は、こちらを使うと便利です。
日本語JPドメインのPunycode変換・逆変換

日本語サブドメインの変更以外で気をつけた点

今回のSEOは、Yahoo! をメインのターゲットした作りにすることにしました。

旧URLへのアクセスは、301 リダイレクトで日本語サブドメインへ

.htaccess を使ってごにょごにょと。
※『.htaccess リダイレクト』 で検索すれば詳しく解説したページが出ます。

ディレクトリ構成は3階層以内で収める

感覚的に、Yahoo! は深いディレクトリはなかなか掘ってこない気がしていて、以前のディレクトリ構成はあまり深く考えずに、作りやすいようにしたらちょっと深くなってしまって、トップのディレクトリに takken/ のディレクトリを切って、そこが 『宅建の試験で合格するぞぉ』 のトップページになるので更に深くなっていました。

今回のサブドメインへの以降の理由はこの点を改善する為というのが大きな理由のひとつでもあります。
この点は修正して今現在は2階層までで、まとめています。

タイトルはページごとに変え、ページを増やす

最近の変更でどうなったかは分からないですが、Yahoo! はページのタイトルと内部リンクをそれなりに見てくれている気がします。だから、ページタイトルはそれぞれ変更しました。また、ページを増やす為に1問ずつの小テストのページを作りました。これは、前回公開した宅建の過去問をそのまま利用しているので、新規でデータをする必要がなく、たいした手間になりませんでした。

1問ずつのページを増やしたのは、実はページを増やす為ではなく、50問一気にやって解答するのは面倒でなかなかやらないので、手軽にできる小テストを作ったのですが、後から無理やり理由っぽくこじつけてみました。

なんにせよ、宅建の過去問を作ることに力を注ぐよりも、はやく宅建の試験勉強をすることに力を注がなくてはいけないのですが、なかなか集中力がつづきません。

Ethna Controller のトレースをメモ

2007/08/07 火曜日 0:09 投稿者 zon

Ethna_Controller の大まかな流れをメモ。

  • バージョンは、2.3.2
  • トリガーは、GATEWAY_WWW

// 実行前フィルタ
Ethna_Plugin_Filter::preFilter();

// トリガー
Ethna_Controller::_trigger_WWW();

  // アクション名取得
  Ethna_Controller::_getActionName();
    // フォームから要求されたアクション名を取得する
    Ethna_Controller::_getActionName_Form();
      // UrlHandler を取得してアクション振り分け
      Ethna_Controller::getUrlHandler();

  // アクション実行前フィルタ
  Ethna_Plugin_Filter::preActionFilter();

  // バックエンド処理実行
  Ethna_Backend::perform();
    // アクション実行前の認証処理
    Ethna_ActionClass::authenticate();
    // アクション実行前の処理(フォーム値チェック等)
    Ethna_ActionClass::prepare();
    // アクション実行
    Ethna_ActionClass::perform();

  // アクション実行後フィルタ
  Ethna_Plugin_Filter::postActionFilter();

  // 画面表示前処理
  Ethna_ViewClass::preforward();
  // 画面を出力
  Ethna_ViewClass::forward();

// 実行後フィルタ
Ethna_Plugin_Filter::postFilter();

メモ

  • 実行前フィルタはアクションを取得していないので、アクションに依存しない処理(初期化等)をする。
  • セッションはバックエンド処理の手前で取得している?アクション実行前フィルタで、セッション値をごにょごにょすることはできないかも。試してないから予想。
  • アクションに特化しない共通の処理は Plugin_Filter を作って、アクション実行前後の処理に差し込む。
  • リダイレクトするなら画面表示までにしておく。アクション実行の結果からアクション実行後フィルタでリダイレクトする。
  • 実行後フィルタは表示に影響しない処理を行う。
  • AppID_ActionClass や AppID_ViewClass は基本継承して、親クラスで共通処理をしてしまうと楽。
  • UrlHandler のアクション設定は EthnaUrlHandler::requestToAction() をチェックすればよい。

404 Not Found でリダイレクトの勘違い

2007/08/02 木曜日 1:43 投稿者 zon

アクセスしたページに対して、サーバサイドリダイレクトや、meta要素のrefreshを用いたページリダイレクトをオンラインで検証することができる、リダイレクト検証ツールというWebツールがあります。以下に書かれているものがそれです。

リダイレクト検証ツール

いきなり、リダイレクト検証ツールの話から入りましたが、今回は404エラーとリダイレクトの話です。

ことの始まりは、前回の宅建の試験に合格するぞぉの記事で書いた 『404エラーを返してトップページにリダイレクトするようにしている。』 の部分ですが、書かれてある通りで、header() で、『404 Not Found』 を返して、そのまま header(Location: URL) でリダイレクトしていました。

リダイレクトを正しくできていないと、検索エンジンにスパム扱いをされるとどこかで目にしたので、正常にリダイレクトされてるか、上記のツールを使って調べてみました。そしたら 『302 Found』 を返してリダイレクトしているという結果がでたのです。

で、『HTTP Status』 で検索してみると [Studying HTTP] HTTP Status Code にたどり着いたのですが、これを見た感じだと 3XX を返す時意外はリダイレクトするのはダメなのではという気がしてきました。

また、404エラーでリダイレクトするのは使いづらいというようなこと書いてる人もいました。理由は 『ブラウザのアドレスバーに直接URLを打ち込んだ時に、タイプミスでリダイレクトされたら初めから打ち直さないといけないから』 というようなことだったのですが、ごもっともです。自分はトップページにリダイレクトしたほうが、ユーザや検索エンジンにやさしいかと思っていたのですが、見当違いでした。

なので、404 エラー用のページを作って、リダイレクトするプラグインを修正して、不正なURLにアクセスした時は、404 エラーを返して、404 エラー用のページを表示するようにしました。

おかげで、Ethna の Ethna_Controller を少しだけトレースしたので、Filter、Action、View の流れが理解できてきて、スマートな構成になりました。ついでに UrlHandler の使い方も 『理解できてきたかな?』 くらいになりました。

Controller 部に関しては、メモしておかないと忘れそうなので、近いうちに書こうと思っています。

zontheworld
HTML convert time: 0.666 sec. ( Login )