気がついたこと

実家に帰るとやることがない。みんな仕事って何じゃそら。
いろいろやりたいけど、ハードディスク置いてきたんで、何かするにはうちからダウンロードしないといけないわけで。
回線遅いわけで。
PC遅いわけで。

とりあえず、WordPressで遊ぶかな。
ログが大量に残るけど。

■ 画像
画像をアップロードするとき、タイトルは勝手にファイル名が入る。(消しても必須属性だから勝手にランダム値が入る)
でも、代替テキストは空。
そのままアップロードするとalt属性が空になってしまう。

代替テキストが空だったらタイトルから引っ張ってきてほしいんだけどなぁ…
代替テキストにファイル名ってのはどうかと思うけどさ……

■ 続きを読む
トップに表示される部分とされない部分の境目に線を引いてるけどdiv使って引いてたんで
「<div>と</div>の間が空です。」
ですってwwwwwwwwww

修正するか…

あれ。どこ変えれば良いんだっけ?

■ <a>のアンカーXXXXはXXX行目で異なるリンク先を刺しています。
デフォルトウィジェットだと編集しても、WordPressバージョンアップで元に戻るわー
うぜー

_wp_unfiltered_html_commentみたいに置換ってのは難しいしなぁ…
かといって、自分で作るのはメンドイし…どうしたものか……

とりあえず、手で修正入れておくか。日付と時間をtitleにしておけば大丈夫だろ。
前やったときは投稿者にしてたからな。投稿者はまずいだろ。

default-widgets.php 645行目
get_comment_date(‘Y.m.j’)とget_comment_time(‘H:i:s’)追加

		< ?php echo $before_widget; ?>
			< ?php if ( $title ) echo $before_title . $title . $after_title; ?>
			<ul id="recentcomments">< ?php
			if ( $comments ) : foreach ( (array) $comments as $comment) :
			echo  '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '<a href="' . esc_url( get_comment_link($comment->comment_ID) ) . '" title="'.get_comment_date('Y.m.j').' '.get_comment_time('H:i:s').'">' . get_the_title($comment->comment_post_ID) . '</a>') . '';
			endforeach; endif;?></ul>
		< ?php echo $after_widget; ?>

せっかく作ったので

デスクトップにtest.phpってファイル名で置いてたら、消して後悔しそうだったのでここに書いておこうと思う。

< ?php
$initdir    = "/wordpress/";
$ext        = ".php";
$find       = "_wp_unfiltered_html_comment";
$replace    = "wp_unfiltered_html_comment";

$filelist = get_filelist($initdir, $ext);
foreach($filelist as $key => $filename) {
    // ファイルを読み込む
    $fcontents = @file_get_contents($filename);

    // 検索
    $pos = strpos($fcontents, "_wp_unfiltered_html_comment");
    if($pos !== FALSE) {
        // 文字列が存在した場合
        // 置換
        $fout = fopen($filename, "w");
        fwrite($fout, str_replace($find, $replace, $fcontents));
        fclose($fout);
        echo "replace : " . $filename . "\n";
    }
}

// $initdir以下の$extファイルのリストを取得する
function get_filelist($startDir, $ext) {
    $dir      = $startDir;
    $dirs     = array();
    $filename = array();
    $next     = 0;
    foreach(glob($dir."*".$ext) as $_filename) {
        $filename[] = $_filename;
    }
    while(true) {
        $_dirs = glob($dir."*", GLOB_ONLYDIR | GLOB_MARK);
        if(count($_dirs)) {
            foreach ($_dirs as $key => $_dir) {
                foreach(glob($_dir."*".$ext) as $_filename) {
                    $filename[] = $_filename;
                }
                $dirs[] = $_dir;
            }
        } else {
            break;
        }
        $dir = $dirs[$next++];
    }
    return $filename;
}
?>

どっちが面倒なのか

wordpressにログインしてる状態で、個別ページを開くと文法エラーになる。
コメント送信部分のid属性値に”_”で始まってる “_wp_unfiltered_html_comment” があるのが原因で、頭のアンダーバーを取ればエラーは出なくなる。

ただ、バージョンアップする度に3つのファイルを開いて “_wp_unfiltered_html_comment” を置換するのが面倒だった。

なので。

phpでwordpressディレクトリ以下をgrepかけて置換するのを作った。

しかし、だ。
しかしなんだ。
いちいち、sshとかでサーバーにログインしてphp実行させるのめんどくさい。

じゃあ、プラグインにするか。
と、なり。

作ってみた。初めてのwordpressプラグイン!
しょぼい……

_wp_unfiltered_html_comment replacer

管理画面を開くたびにチェックして勝手に置換したほうが楽だろうけど…
毎回、ファイルチェックするのはちょっと…

余談:
バージョンアップしないっていう選択肢はない。
ScanNetSecurity – WordPressのfile.php脆弱性に関する検証レポートを発表(NTTデータ・セキュリティ)

libpng.lib作成

用意するモノ
・libpngソース PNG (Portable Network Graphics) Home Site
・zlib.libを作成時にあったモノ一式
・Visual C++2008 Express Edition(64-Bit Targets適用)

ダウンロードしたlibpngを展開。
コマンドプロンプトを開き、展開したlibpngフォルダまで移動。

vc用のmakefileをコピー。

F:\desktop\lpng1238>copy scripts\makefile.vcwin32 .\makefile

MSVCR80.DLLを使いたくないのでmakefileを編集。
19行目

#CFLAGS  = -nologo -DPNG_NO_MMX_CODE -MD -O2 -W3 -I..\zlib
CFLAGS  = -nologo -DPNG_NO_MMX_CODE -MT -O2 -W3 -I..\zlib

lpngフォルダと同じ階層にzlib.libを作ったときのzlibフォルダ01を置いておく。
Visual C++ ツールセットを有効にしてnmake。

32bit
F:\desktop\lpng1238>"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
Setting environment for using Microsoft Visual Studio 2008 x86 tools.

64bit
F:\desktop\lpng1238>"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat"
Setting environment for using Microsoft Visual Studio 2008 Beta2 x64 tools.

F:\desktop\lpng1238>nmake

libpng.lib完成。
もう一度nmakeする場合は、nmake cleanしてからすること。

  1. フォルダ名をzlibに [戻る]

zlib.lib作成

用意するモノ
・zlibソース zlib Home Site
・Visual C++2008 Express Edition(64-Bit Targets適用)

ダウンロードしたzlibを展開。
コマンドプロンプトを開き、展開したzlibフォルダまで移動。

vc用のmakefileをコピー。

F:\desktop\zlib123>copy win32\Makefile.msc .\Makefile
.\Makefile を上書きしますか? (Yes/No/All): y
        1 個のファイルをコピーしました。

MSVCR80.DLLを使いたくないのでMakefileを編集。
30行目の”-MD”を”-MT”に変更。

#CFLAGS  = -nologo -MD -O2 $(LOC)
CFLAGS  = -nologo -MT -O2 $(LOC)

Visual C++ ツールセットを有効にしてnmake。

32bit
F:\desktop\zlib123>"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
Setting environment for using Microsoft Visual Studio 2008 x86 tools.

64bit
F:\desktop\zlib123>"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat"
Setting environment for using Microsoft Visual Studio 2008 Beta2 x64 tools.

F:\desktop\zlib123>nmake

zlib.lib完成。
もう一度nmakeする場合は、nmake cleanしてからすること。

朝の良く動いてない頭で

Microsoft Visual Studio 2008 Express Editionをインストールしてみた。
実は2008インストールしてなかったんだ。

あと、Download details: Windows SDK for Windows Server 2008 and .NET Framework version 3.5も忘れずにインストール。

Visual C++ 2008 Express Edition And 64-Bit Targets « Jens’ Blogもインストール。
64ビットexeが作れるようになった。

リソースファイルを手打ちで書くのは面倒なので、ResEdit Resource Editor – free resource editor for Win32入れておくかな。

で、何作るよ?

<textarea> には初期値となるテキストを指定しておきましょう。

Another HTML-lint gatewayでチェックすると個別ページで

「<textarea> には初期値となるテキストを指定しておきましょう。」

っていわれる。
入力用フォームなら初期値とか要らない気がするんだが、何かしら文字を出しておくのも悪くないかなと思って初期値を入れてみることにした。

    <p>
        <textarea name="comment" id="comment" cols="45" rows="10" tabindex="4">コメントして下さい。</textarea>
    </p>

テーマのcomments.phpに上記のように初期値を追加。
これで、100点だ。

しかし、このままだとボタンを押されると「コメントして下さい。」の文字が送信されてしまう。
そこの制御はJavascriptさんに任せることにします。

上の検索フォームで使ってるソースを流用。01

$(document).ready(function(){
  var defmsg = 'コメントして下さい。';
  $('#comment').blur(function(){
      var $$=$(this);
      if($$.val()=='' || defmsg==$$.attr('value')){
        $$.css('color', '#7F7F7F').val(defmsg);
      }
    })
    .focus(function(){
      var $$=$(this);
      if(defmsg==$$.attr('value')){
        $(this).css('color', '#000000').val('');
      }
    })
    .parents('form:first').submit(function(){
      var $$=$('#comment');
      if(defmsg==$$.attr('value')){
        $$.triggerHandler('focus');
      }
    }).end()
    .blur();
});

これで、フォームがアクティブになると「コメントして下さい。」の文字が消え。
かつ、初期値のままでは投稿できないようになりましたとさ。

  1. jQueryを使用 [戻る]

_wp_unfiltered_html_comment

WordPressにログインした状態のコメントフォーム内のid属性値に”_wp_unfiltered_html_comment”ってのがある。

id値はアンダーバーから始まっちゃダメだろ…

まぁ、別に何か問題があるというわけではないんだが、FirefoxにHtml Validatorをインストールしてると警告マークが付いて気になってしょうがない。

というわけで、最初のアンダーバーを取って”wp_unfiltered_html_comment”にする。

dw2009071802

プラグインが使ってるかもしれないから、一応Grepした方がいいよ。

Another HTML-lintで100点を目指せ

現状

dw2009071701

すでに、「よくできました。」である。
もうゴールしても良さそうな点数だけど、気になるので修正。

プラグインと動作チェック

HTTPのエラーログに大量のエラーが…

[Mon Jul 13 20:19:42 2009] [error] [client 203.135.231.85] next, referer: http://www.dazzlingworld2.com/

<!–nextpage–>を使ったページを表示するだけで出るようで、何でこんなのが出るのか半日ほど調べたけど分からず。
おかげで仕事も手に付かず。
でも、仕事中にもしかしてと思い当たる。

もしかして、PHPにエラーログ吐かせる命令があるのではないか。と。

で、実際にあってビンゴです。
error_log();
ってのらしい。

サーバー内を”error_log(‘next’)”でgrepしてみると一件出てきた。
Table of Contents Generatorっていう見出しから目次を作るプラグインの中にありました。

Table of Contents Generator的にはnextpageは使って欲しくないのだろうか?
確かに、目次のリンクが切れそうではあるが…

error_log(‘next’);をコメントにすれば良いんだろうけど、プラグイン自体使わなさそうだから停止しとくかな。