たぶんこれに興味のある人は日本全国に10人くらいしかいないと思いますが、WordPressを PostgreSQLで使うドライバ、pg4wpのその後です。
プラグインを入れるたびに新たなエラーが発生して、その都度、いろいろと手を入れています。
今回は、Contact Form 7を入れたらエラーになりました。Contact Form 7が auto_increment付きのテーブルをクリエイトしようとしてエラーになりました。WordPressの標準って主キーにオートインクリメントを使ってないのですかね。それはそれでびっくりです。

if(stripos($sql, 'CREATE TABLE') === 0) {
  $sql = str_ireplace('CREATE TABLE IF NOT EXISTS', 'CREATE TABLE', $sql);

  $a   = preg_split("/(CREATE TABLE | \()/", $sql);
  $tbl = $a[1];

  $sql = preg_replace("/DEFAULT CHARACTER SET .+;/", ";", $sql);
  $sql = preg_replace("/,\s*PRIMARY KEY\s\(.+?\)/i", "", $sql);
  $sql = preg_replace("/text\s+NOT\s+NULL/i", "text default ''", $sql);
  if (stripos($sql, 'auto_increment')) {
    $s = "";
    $a = explode("\n", $sql);
    foreach($a as $v) {
      if (stripos($v, 'auto_increment')) {
        $b = explode(" ", trim($v));
        $key = $b[0];
        $v = $key." integer DEFAULT nextval('".$tbl."_seq'),\r\n";
      }
      $s .= $v;
    }
    $sql = $s;
    $sql = "CREATE SEQUENCE ".$tbl."_seq; ".$sql."; CREATE UNIQUE INDEX ".$tbl."_".$key."_key on ".$tbl." (".$key.");";
  }
}

相変わらず力技です。(ここは笑うところか?)
まず、PostgreSQLには “IF NOT EXISTS”がないのでこれを取っ払って(テーブルがすでにあったらエラーになるので、なかったら実行はなくても可)、”PRIMARY KEY(key)”という指定もないみたいなので、これも取っちゃって、あと、これがクリビツテンギョウなんですけど、MySQLは text NOT NULL属性で値を指定しない(INSERT文に含めない)と、空文字を勝手に入れてくれるのに対して、PostgreSQLはエラーになっちゃうんですね。
これは NOT NULL属性をつけてる主旨からいって、PostgreSQLを支持したいです。でも、INSERT文でエラーになるのは仕方ないので、text NOT NULLは、text default “”にして、NOT NULLを外しちゃいました。
 
あと、面倒なところが、auto_incrementの取扱い。そのまま、SERIALにしちゃえばいいようなものなんですけど、そうすると、シーケンシャル・テーブルの名前が、table名_カラム名_seqという名前になって、wp_optionsなんかで使っている table名_seqルールと合わなくなってしまうこと。
で、SERIALが使えなくて、いちいち、CREATE SEQUENCE、CREATE UNIQUE INDEXみたいなことをやってるわけです。(きっとどっかにもっといい方法があるはずだ)
 
参考:PostgreSQL 日本語ドキュメントはよくできています。

ここ『jQueryによるフォーム部品操作のレシピ』にまとめていただいているので感謝。

jQuery('input[name=target][value=xxx]').attr({ checked: "checked" });
$(’:radio[@name=target]:checked’).val();

こういう書き方ができるというのが目から鱗。下の方は試したわけではないのですが、いけるそうです。
 
あと、画面表示のときにフォーカスを移したいなというときはこちら。

jQuery("#mytext").focus();

body onload=”ほげほげ” とかしなくていいので、HTMLを汚さないのがいいかも。
 
あと、ついでに、Contact Form 7とかで、ラジオボタンが横向きにずらずらっと並んでしまって、縦一列にしたいけど、ラベルに<br/>とか入れたり、¥n入れたりするのってダサくないというときの解決法。

span.wpcf7-list-item { display: block; }

これは目から鱗。display: block ってこういうときに使うんだという感じ。

これはさるところで、主として視覚効果として使用させていただいているスライダーです。本来はインプットの部品として使用するのですが、表示効果としてキレイで使いやすいので、少し外れた使い方ですが。
こちら『jQuery Slider update』がオリジンです。
使用方法はこちら『Safariぽいスライダーを作るJavaScript「jQuery Slider plugin」』が日本語で書かれているのでわかりやすいです。
ま、やってることはシンプルなので、オリジナルページのサンプルを読んだ方がいろいろと設定できてうれしいです。

WordPressで唯一面倒だと思うのが、画像の挿入。
アップロードはまとめて一括であげられるんだけど、それを投稿に入れようとしたら、一枚ずつ指定しないといけなくて、なんでこんな仕様にしたんだろうと思うことたびたび。チェックボックスをチェックしたものだけ、一括操作で「投稿挿入」させてくれてもいいじゃんと。
たぶんお客さんに「これ、不便だから何とかならないの?」みたいに言われたらすぐやると思うんですけど、自分が使う分には、まとめてあげといて、名前とサイズをメモっといてあとはエディタ上でコピーするだけだから、なくてもいいっちゃいいんですけど、別件でググってたら、そのものずばりの記事があったのでメモ。『WordPressの投稿に複数のアップロード画像を一括挿入する
まだ、やってませんけど、いずれそのうちに。ちなみに、このサイトは他の記事も辛口でオモシロイです。ポートフォリオとか特に。名古屋の美容室の仕事とか頼まれたら丸投げしたい。

あまりコメントを受け付けるページを作ってこなかったのですが(依頼される方が「(コメントに答えるみたいな)そんなこと、できないよ!」とおっしゃるので)、コメント重視のページを作らざるを得なくなって(なんだか、書き方が変だ)、いろいろやってると、標準のコメント欄って、エラーのとき、ページ遷移してエラーページに切り替わっちゃうんですね。ダサくないすか?
 
て、いうことで、サクサクっとググってみつけたのがこのページ『ページの移動なくコメントを投稿できるWPのプラグイン WDP AJAX Comments』。
日本語で書かれたページがあれば、もちろん、日本語の方が楽ちんですので、はい。なければ、英語のページでもよみますけどね。
ここに書かれている通り、ajax-comments.js のメッセージのみ日本語にしました。あとは、まったくOKです。ありがとうございます。
 
上のがダメだったら、こちら『jQuery で WordPress のコメント投稿を Ajax 化』にしようかなと思って調べていたんですけど、問題なかったので、こちらはメモとして。

WP-Super-Cacheのときに懲りていたはずなんですが、またやってしまいました。(スーパーキャッシュのときは、通販サイトのカートがクロスサイトスクリプティング対策をやってて、そのワンタイムトークンごとキャッシュしてたので、キャッシュを読むとXSSエラーになるという。orz…)
 
Apacheに cache と disk_cache というモジュールがあって、Apacheレベルでキャッシュしてくれるなら、きっと汎用性が高いだろう(スーパーキャッシュのときのようなことはないよね)と勝手に思って、この2つを available にしたんですが、WordPress Muでリダイレクト無限攻撃!orz…
 
「キャッシュがある程度溜まる」&「ブラウザのCookieの状態」&「なにか」で無現リダイレクトになるみたいで、ちゃんと追っかけきれてないんですが、301攻撃の嵐!
mod_evasiveを入れていたので、DoS攻撃だとみなされて、403 Forbiddenと踏んだり蹴ったりです。
気をつけましょう。