Google Crisis Response(Google)
災害に関する情報源や、行方不明者情報の収集と検索を行う『パーソンファインダー』を初めとするツールの提供が行われています。

2007年3月31日 土曜日

プラグイン Lighter Admin Drop Menus を導入

Filed under: プラグイン
時間:16時25分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 Standing Tall さんの記事で知った WordPress のプラグインの、Lighter Admin Drop Menus を入れてみました。管理画面のメニューをドロップダウン形式にするプラグインです。

 ドロップダウンする部分は、少し立体的に見えるようなボーダー表現になっています。 ドロップダウンになる以外には、デザインが少し変わります。落ち着いた色合いで、私は結構好きです。

 記事ではlighteradminmenusフォルダごとプラグインフォルダに入れて有効化とありますが、配布されているアーカイブではそのフォルダは含まれていないようです。フォルダを作ってくれる解凍ソフトの場合は大丈夫ですが、そうでない場合はいきなりファイル(といっても、ファイルが3つとフォルダが1つですが)が散らかってしまうのでご注意。

 プラグインが増えてきたときにメニューがどうなるか心配ではありますが、ガンガン入れるほうではないのでそのとき考えます。

Comments (0)

2007年3月30日 金曜日

SpamAnalytics をそのうち作る

Filed under: SpamAnalytics
時間:0時08分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 先日スパムコメントの解析をするにあたっていろいろと SQL を打ちました。そのとき思ったのが、プラグインで自動化できないかなということ。

 コメントを記録しているデータベーステーブルにクエリーを送ることで、スパムの傾向とかを知ることができるような気がします。アクセスログ解析ならぬ、スパムログ解析。グラフはなんともいえませんが、とりあえずは数値として表示させてみたいと思っています。

Comments (1)

2007年3月24日 土曜日

スパムコメントのアクセス元を抽出してブロック

Filed under: WordPress,ハック
時間:18時44分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 スパムコメントは99%以上が Akismet によってブロックされているのですが、鬱陶しいので Apache の機能で特定 IP アドレスからのアクセスをブロックしています。
 最近またスパムコメントが増えてきましたので改めて設定。どうやっているかをついでにメモ。

 まずはスパム業者の IP アドレスの抽出です。このブログを設置しているサーバではデータベースに phpMyAdmin でアクセスできるので、次の SQL を直接発行しました。

  1. SELECT `comment_author_IP`, count(`comment_author_IP`) AS cnt
  2. FROM `wp_comments`
  3. WHERE `comment_approved` = 'spam'
  4. AND TO_DAYS( NOW() ) - TO_DAYS(`comment_date`) < = 30
  5. GROUP BY `comment_author_IP`
  6. ORDER BY cnt DESC;

 これで、最近の30日で回数の多い順に IP アドレスが抽出されます。この IP アドレスを Limit ディレクティブでアクセス禁止にします。私は上位10個を指定しました。

  1. <Limit GET POST>
  2. order allow,deny
  3. deny from 012.345.678.9
  4. allow from all
  5. </Limit>

 やっていることは、WorstOffenders(旧名称 Akismet htaccess extension) というプラグインと同じだと思います。面倒なら、このプラグインを入れてしまうほうがいいかもしれません。

Comments (0)

2007年2月18日 日曜日

EntryKeywords 0.5.0 公開しました

Filed under: EntryKeywords,WordPress,プラグイン
時間:15時34分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 『公開迫る』といいつつ、結局2週間も過ぎてしまいました。自作 WordPress プラグインの EntryKeywords 0.5.0 をやっと公開です。

 公開場所は、予定通り JSeries になりました。その中に専用のページを作り、リリース情報などを掲載するようにしています。

 また、このブログに専用のカテゴリーを新設しました。JSeries はコメントやトラックバックができませんので、必要な場合はカテゴリー内の記事にでもしていただければと思います。

Comments (2)

2007年2月15日 木曜日

WordPress プラグインのトラブル解決

Filed under: EntryKeywords,WordPress,ハック,プラグイン
時間:4時14分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 フック admin_headdo_action を実行している直前で $wp_filter の中身をすべて表示させてみたところ、あっさり解決しました。
 関数名を検索してみるとしっかり登録されていたので登録内容を確認。フックのところを見たとき愕然としました。

 フック名は、「admin_head 」。後ろに余計なスペースが・・・。

 はい。単なる入力ミスです。こんなのに3日も悩んでたんですか。
 スペルを間違えないようにコピーしてきたときにスペースが入ってしまったのではないかと。本末転倒もいいところです(^^;

 フックは開発者が自由に決められる仕組みなので、スペルミスには注意が必要ですね。構文エラーなら PHP が面倒を見てくれますが、今回のような論理エラーは思い込みなどで気がつくのに時間がかかります。皆さんもご注意くださいませ。

Comments (0)

WordPress プラグインの仕組み

Filed under: EntryKeywords,WordPress,ハック,プラグイン
時間:3時25分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 自作プラグイン EntryKeywords のオプション設定画面を CSS で装飾したくて作業中。

 マニュアルを見ていて add_action('admin_head ', '関数'); とすればいいはずと目星をつけていましたが、なぜか動いてくれません。2日以上悩み続けています。仕方がないので流れを追いかけてみることに。
 結局動くまでには至っていませんが、せっかくなので仕組みをメモ。

登録

 まず、関数 add_action でフックに対応する関数の登録を行います。2.0.7 では add_filter を呼び出すだけなので、実際の処理は 関数 add_filter を見ます。定義は、/wp-includes/functions.php にあります。

  1. function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
  2.     global $wp_filter;
  3.  
  4.     // check that we don't already have the same filter at the same priority
  5.     if ( isset($wp_filter[$tag]["$priority"]) ) {
  6.         foreach($wp_filter[$tag]["$priority"] as $filter) {
  7.             // uncomment if we want to match function AND accepted_args
  8.             // if ( $filter == array($function, $accepted_args) ) {
  9.             if ( $filter['function'] == $function_to_add ) {
  10.                 return true;
  11.             }
  12.         }
  13.     }
  14.  
  15.     // So the format is wp_filter['tag']['array of priorities']['array of ['array (functions, accepted_args)]']
  16.     $wp_filter[$tag]["$priority"][] = array('function'=>$function_to_add, 'accepted_args'=>$accepted_args);
  17.     return true;
  18. }

 フックの登録は、グローバル変数 $wp_filter に配列として登録されます。関数 add_filter の処理は大きく2つに分かれていて、登録処理は後半の部分で行います。前半は重複して登録しないためのチェックです。
 登録処理のコメントにもありますが、登録情報はフックと優先度で分類されています。また、関数にはオブジェクトのメンバー関数も登録できます。その場合は、array(オブジェクトインスタンス, 関数名) という配列を使います。オブジェクトインスタンスは参照渡しする必要があります。そのため、PHP 4 では変数の頭に & をつけて明示的に参照渡しにする必要があります。

実行

 登録した関数を実行するには、関数 do_action を使います。この定義も /wp-includes/functions.php にあります。

  1. function do_action($tag, $arg = '') {
  2.     global $wp_filter;
  3.     $extra_args = array_slice(func_get_args(), 2);
  4.     if ( is_array($arg) )
  5.         $args = array_merge($arg, $extra_args);
  6.     else
  7.         $args = array_merge(array($arg), $extra_args);
  8.  
  9.     merge_filters($tag);
  10.  
  11.     if ( !isset($wp_filter[$tag]) ) {
  12.         return;
  13.     }
  14.     foreach ($wp_filter[$tag] as $priority => $functions) {
  15.         if ( !is_null($functions) ) {
  16.             foreach($functions as $function) {
  17.  
  18.                 $function_name = $function['function'];
  19.                 $accepted_args = $function['accepted_args'];
  20.  
  21.                 if ( $accepted_args == 1 ) {
  22.                     if ( is_array($arg) )
  23.                         $the_args = $arg;
  24.                     else
  25.                         $the_args = array($arg);
  26.                 } elseif ( $accepted_args > 1 ) {
  27.                     $the_args = array_slice($args, 0, $accepted_args);
  28.                 } elseif ( $accepted_args == 0 ) {
  29.                     $the_args = NULL;
  30.                 } else {
  31.                     $the_args = $args;
  32.                 }
  33.  
  34.                 $string = call_user_func_array($function_name, $the_args);
  35.             }
  36.         }
  37.     }
  38. }

 前半は飛ばして、後半の foreach を見ます。
 特定のフックに対する登録情報を順に処理しています。情報を取り出し、引数の処理をし、最後に組み込み関数 call_user_func_array で関数をコールします。

どこまでは動いているのか

 調べた結果、少なくとも add_filter での重複チェックを通過していることはわかりました。最後の return の直前($wp_filter への登録直後)で $wp_filter[$tag]["$priority"] の値を表示させて確認しました。
 add_action を経由しないで直接登録した場合ではきちんと動作しましたので、何らかの理由により登録を削除されているのではないかと考えています。

Comments (1)

2007年2月11日 日曜日

WordPress ダッシュボードの構文エラーの修正

Filed under: WordPress,ハック
時間:17時52分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 WordPress ダッシュボードには、ブログ内のページにリンクを張っているサイトのリストが表示されています。Me の日本語リリースでは「リンク元」とタイトルがつけられているところです。

 このリストですが、リンク部分に構文エラーがありました。リンクの終了タグである </a> がありません。2.0.6 の時点でなっていました。2.0.7 でも直っていません。

 2.0.7 での修正方法は次のとおり。

 修正前。/wp-admin/index.php の28行目。

  1. <li><a href="<?php echo wp_filter_kses($item['link']); ?>">< ?php echo wptexturize(wp_specialchars(wpj_rss_convert($item['title']))); ?></a></li>

 修正後。行末の </li> の直前に終了タグを入れます。

  1. <li><a href="<?php echo wp_filter_kses($item['link']); ?>">< ?php echo wptexturize(wp_specialchars(wpj_rss_convert($item['title']))); ?></a></li>

 これで構文エラーはなくなりました。

 なお、ほかのバージョンで修正箇所を探す場合は、次のコードを目印にするといいかもしれません。タイトルの部分です。そこから5・6行下に修正箇所があると思います。

  1. < ?php _e('Incoming Links'); ?>
Comments (0)

2007年2月5日 月曜日

オリジナルプラグイン EntryKeywords の公開迫る

Filed under: EntryKeywords,WordPress,プラグイン
時間:1時49分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 先月の中ごろから WordPress プラグインの作成に挑んできましたが、もうまもなく公開できると思います。名称は、EntryKeywords。

 機能としては、記事に対してキーワードを複数設定し、それをいろいろと利用しようというものです。再利用を重視している点でタグ系のプラグインとは違います。基本は文字列での表示ですが、配列や JSON で取得できるなど、プログラマ寄りになっています。
 公開場所は WordPress Plugins/JSeries の予定。発案者であるひろまささんには参加の申し込みをしてあるので、現在返事待ちです。

 まだドキュメントもなくベータ版状態ですが、よかったらいじってみてください。GPL ライセンスですので、変更もご自由に。

Comments (1)

2007年1月29日 月曜日

Gigazine の威力

Filed under: ブログ
時間:0時34分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 アクセスログを見たら、一昨日の訪問者数が普段の2倍に。「更新すらしていなかったのに何で?」と主なリンク先を確認してみると、超大手の Gigazineさんが約74%です。ちなみに、2位は Google で14.6%でした。

 さっそく見に行ってみたところ、夕方の記事からリンクされているではありませんか。

 リンク先は Akismet のハックを扱った記事。しかも、日本語に特化した詳しい使い方の説明として紹介されています。
 紹介のされ方がいいとかスパム関連とかあるとしても、リンクひとつで普段の倍のアクセスをもたらすとは。いやはや、恐れ入ります。

 しかし、使い方の説明はまったくないと思うんですが、いいんでしょうか。ダブルバイトを含むスパムだけ表示するようにする方法のところ?うーん・・・。
 多分、普通に使う分には WordPress Japan ので十分だと思います。基本的には設定したら、あとはほったらかせばスパム判定されたものは消えてゆきますので。

Comments (0)

2007年1月25日 木曜日

ダッシュボードの『その他の WordPress サイト』が更新されない

Filed under: WordPress
時間:23時54分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 ダッシュボードの『その他の WordPress サイト』が更新されていないことが最近多いです。RSS リーダー代わりに結構参照しているのですが、1日経っても同じままだとちょっとさびしいです。
 この部分ははてなのRSSサービスを利用していることがすでにわかっているので、ソースコードから探し出して直接見てみました。

 まったく違う内容でした。どこかにキャッシュされているんでしょうか。そのうちハックしてみます。

ダッシュボードについて

 WordPress を使った事のない方のために簡単に説明。
 ダッシュボードは、WordPress の管理画面の一番最初に表示されるページで、ニュース情報や最近のコメント・投稿した記事などが表示されます。

Comments (0)
Page 8 of 13« First...678910...Last »

HTML convert time: 0.250 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo