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

2007年1月15日 月曜日

記事にキーワードをつけるアイディアのメモ

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

 ちょっと思いついたのでメモ。時間があればプラグインとして作ってみようと思いますが、今はただのメモ。

 実はもうある?ご存知の方ぜひ教えてください。面白そうだから作るよというのも大歓迎です。

アフィリエイト要に記事にキーワードを付ける

 Amazon.co.jp のライブリンクのように、ASP型のアフィリエイトサービスには、キーワードによって表示する商品を動的に決定することができるものがあります。お任せリンクではキーワードの抽出がどうなっているのかわからず曖昧になりがちですが、直接指定することで好きなように決めることができます。

 ブログでは、カテゴリーという概念があります。記事を大まかに分類するわけです。もう少し細かいものにタグがあります。これも一種のキーワードといえますが、アフィリエイト用としてはまだちょっと曖昧な気がします。細かくしすぎるとタグの意味がなくなってしまいますし。

キーワードを記事に紐付ける

 ということで、専用のキーワードという概念が必要であると私は結論付けました。そして、それを WordPress のカスタムフィールドでできないかと考えています。記事の ID と紐付けられた形でデータベースに記録されるようなので、記事 ID からたどって値(ここではキーワード)を取得することも可能なはずです。

 ここまでくればあとは簡単。アフィリエイトの広告表示コードを出力する関数を定義したプラグインを作るだけ。キーワードを URL エンコードして埋め込むようにしてやれば、投稿画面で設定したキーワードを広告表示コードに渡すことができるはずです。表示はテンプレートに関数を埋め込んでもらいます。

柔軟にする

 プラグインオプションの設定画面がほしいですね。
 広告コードを設定することができればいろいろ対応できますし、ほかにもいろいろオプションが必要になるかもしれません。

その他

 キーワードの設定がない場合はカテゴリーを使えばいいでしょうか。オプションで初期値を設定できるというのもありかも。

Comments (0)

2007年1月11日 木曜日

Popularity Contest 日本語版 を導入

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

 記事の人気度を表示する、Popularity Contest の日本語版を導入しました。

 インストールは一般的なプラグインと同じで、アップロードして有効にするだけ。記事本文の一番最後に、次のように人気度が自動的に挿入されます。

  1. <p class="akpc_pop">人気度: 20%</p>

 別の場所にしたいとか、デフォルトとは違うコードにしたい場合は、ファイルの上のほうにある変数(手元のファイルでは38行目)
$ak_show_popularity_with_post の値を1から0にします。
 プログラム上は1以外にすればいいと思いますが、次のように書かれているので一応0に。

  1. /* -- INSTALLATION --------------------- */
  2.  
  3. // Change this to "0" below if you don't want to show each post's popularity with the post content
  4.  
  5. $ak_show_popularity_with_post = 1;

 そして、挿入したいところに次のコードを入れます。ランク表示のテキストだけが出力されるので、好みのタグにすることができます。

  1. < ?php akpc_the_popularity(); ?>

 ランクはパーマリンクのクリックやトラックバックなど、さまざまなアクションの点数制によって決まります。アクションごとにどれくらい加算していくのかは、管理画面のオプション→人気度 で変更できます。
 また、ダッシュボード→人気記事一覧 から、詳細な人気記事のリストを見ることができます。

Comments (0)

2007年1月7日 日曜日

Akismet 有名ハックの解説と追加ハック

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

 Akismet de-spam view Hack と呼ばれるハック(プログラムの改造。不正アクセスではない)があります。

 WordPeress のスパムブロックプラグイン Akimet の捕獲したスパム一覧で、半角英数記号以外が含まれたスパム(以下、マルチバイトスパムと表記します)が含まれているものだけ表示するようにするというものです。

 大概のスパムは半角英数のみです。そして、多くの日本語サイトに届くスパムでないコメントやトラックバックは日本語によるものです。だったら、マルチバイトスパム以外を表示しなければすっきりするじゃないかというのが、このハックのコンセプトです。

 また、power source*さんによる、管理画面のダッシュボードにマルチバイトスパムの捕獲数を併記するハックがあります。

 今回、スパム対策の一環としてこの2つのハックを試してみました。効果抜群で、すっきりしたスパム一覧とマルチバイトスパムの捕獲数表示に喜んでおります。

 お二人への感謝と還元と自分への覚書として、この2つのハックの解説をしてみたいと思います。また、思いつきで追加ハックもしました。
 なお、ハックした WordPress のバージョンは2.04です。

Akismet de-spam view Hack

オリジナル

 ファイル /wp-content/plugins/akismet/akismet.php の267行目。

  1. $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT 150");
ハック
  1. $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content) ORDER BY comment_date DESC LIMIT 150");

 変更したのは、一覧に表示するデータを得る部分です。データベースサーバにスパム判定されたコメントのデータを要求しています。このハックでは、SQL の条件文(WHERE 節)にマルチバイトではないという条件を AND で加えています。

追加部分のコード
  1. AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content)

 テーブル wp_comments のフィールド comment_content に格納されているコメントの本文に対し、関数 LENGTHCHAR_LENGTH の結果が一致していないというものです。LENGTH はバイト数を、CHAR_LENGTH は文字数を返します。マルチバイト文字は1文字が1バイトではないため、2つの結果は一致しません。

マルチバイトスパムの捕獲数をダッシュボードに併記するハック

Akismet ダッシュボードスクリーンショット

オリジナル

 ファイル /wp-content/plugins/akismet/akismet.php の323行目。関数 akismet_stats 付近。

  1. function akismet_stats() {
  2.     $count = get_option('akismet_spam_count');
  3.     if ( !$count )
  4.         return;
  5.     $path = plugin_basename(__FILE__);
  6.     echo '<h3>'.__('Spam').'</h3>';
  7.     echo '<p>'.sprintf(__('<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.'), 'http://akismet.com/', "edit.php?page=$path", number_format($count) ).'</p>';
  8. }
関数 akismet_stats のハック
  1. function akismet_stats() {
  2.     $count = get_option('akismet_spam_count');
  3. //  $count = ksd_spam_count();
  4.     $mbs_count = mb_spam_count();
  5.     if ( !$count )
  6.         return;
  7.     $path = plugin_basename(__FILE__);
  8.     echo '<h3>'.__('Spam').'</h3>';
  9.     echo '<p>'.sprintf(__('<a href="%1$s">Akismet</a> has protected your site from <a href="%2$s">%3$s spam comments</a>.'), 'http://akismet.com/', "edit.php?page=$path", number_format($count) ).'</p>';
  10.     if ( $mbs_count ) {
  11.         echo '<p><strong><a href="edit.php?page='.$path.'&amp;akismet_list=mb">要チェック</a></strong>: マルチバイト文字を含むものを '.$mbs_count.' 件捕獲中です。</p>';
  12.     } else {
  13.         echo '<p>この中にマルチバイト文字を含むものはありません。</p>';
  14.     }
  15. }

 マルチバイトスパムのカウントと表示を追加しています。4行目がマルチバイトスパムのカウント、10~14行目がダッシュボードに表示する部分です。
 もともとのハックではマルチバイトスパム以外も含めた捕獲数を捕獲中のものだけにしてありますが、私の好みで総数に戻してあります。捕獲中のものだけにしたい場合は、2行目のコメントアウトをはずし、3行目をコメントアウトするか削除してください。また、もとのハックではリスト表示にする変更をしてありますが、こちらも好みで段落にしてあります。

 4行目で呼び出している関数 mb_spam_count は、新たに定義したものです。関数 ksd_spam_count に、マルチバイトであることを条件に加えたものになっています。Akismet de-spam view Hack と同様の変更です。
 基本的にはどこに記述しても構いませんが、akismet_stats の近くが良いでしょう。私は akismet_stats の直後にしました。

mb_spam_count
  1. function mb_spam_count() { // マルチバイトスパムの件数
  2.     global $wpdb, $comments;
  3.     $count = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam' AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content)");
  4.     return $count;
  5. }
ksd_spam_count

 ファイル /wp-content/plugins/akismet/akismet.php の195行目。

  1. function ksd_spam_count() {
  2.     global $wpdb, $comments;
  3.     $count = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = 'spam'");
  4.     return $count;
  5. }

追加ハック

 解説は以上ですが、思いつきで従来の一覧表示もできるようにしてみました。

267行目(Akismet de-spam view Hack の場所)

 引数を見て、どちらの表示にするか処理を分岐させています。引数の名前は被らなければなんでもいいのですが、とりあえず akismet_spam_list としました。値が mb ならマルチバイトスパムのみ、それ以外なら従来の表示になります。

  1. switch ($_GET['akismet_spam_list'])
  2. {
  3.     case 'mb':
  4.         $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content) ORDER BY comment_date DESC LIMIT 150");
  5.         break;
  6.     default:
  7.         $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_date DESC LIMIT 150");
  8. }
関数 akismet_stats

 せっかくなので、ダッシュボードのリンクも変更します。マルチバイトスパムがあったときの表示をする行(ハックの11行目)を、次のようにします。

  1. echo '<p><strong><a href="edit.php?page='.$path.'&amp;akismet_spam_list=mb">要チェック</a></strong>: マルチバイト文字を含むものを '.$mbs_count.' 件捕獲中です。</p>';

 これで、要チェックのときはマルチバイトスパムだけの表示にでき、最近の傾向を見たいときなどでは従来の表示にすることができます。

参考情報

Function Reference/wpdb Class « WordPress Codex:
データベースアクセス用クラス
Database Description « WordPress Codex:
データベーステーブル
Comments (1)

2006年12月28日 木曜日

機能を実現しているプラグインを知らせたい

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

 WordPress はプラグインを使うことでさまざまな機能の拡張が可能になっています。有名なプラグインは配布元にたどり着きやすいですが、マイナーなものだったりすると結構大変です。ここしばらくいろいろ探し回っていて、そのことを実感しました。

 使用中のプラグインのリストを作っているサイトは多いです。また、最近はスクリーンショットに書き込みをすることで、視覚的なプラグインの紹介という試みも行われています。どちらも有意義ですが、それぞれ問題点があります。

プラグイン紹介の問題点

リスト形式の場合

 リスト形式の場合は、そのプラグインがどこに使われているかわかりにくいという問題があります。リストの項目が増えるほど顕著になり、数十種類使用していたりすると何がなんだかです。もちろん、きちんと分類するとかすれば大分わかりやすくはなりますが。

視覚的な場合

 スクリーンショットによる視覚的な形式の場合は、プラグインの名前がわかっても、直接配布元に行くことができません。名前を検索して、その中から目的のサイトを探り当てる必要があります。クリッカブルマップにすればリンクさせることも可能ですが、メンテナンスが楽ではありません。ツールなしではやりたくない作業です。

どうすればいいのか

 思いついたのが、プラグインによって表示されている近くに配布元へのテキストリンクを入れてしまうという方法です。この方法であれば、視覚的でもあるし、テキストリンクなのでメンテナンスも簡単です。私は、直接テーマファイルに書き込んでしまいました。「by プラグイン名」という形でリンクを入れてあります。
 現時点では、右サイドバーのアーカイブ、各記事の下の評価、複数ページにわたるアーカイブの一番下にあるページナビゲーションの3箇所がプラグインに拠るもので、全て上記の方法で配布元へのリンクを張っています。

 この方法、いかがでしょうか。

Comments (0)

2006年11月27日 月曜日

Akismet 導入しました

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

 10月くらいから宣伝目的と思われるトラックバックやコメントが頻繁に入るようになりました。アクセスがすこしずつ増えて喜んでいたのもつかの間。招かざる客も増えることに。

 しばらくは手動で消していましたが、それも面倒になってきました。とりあえず、WordPress に標準搭載されている Akismet というスパムブロックプラグインを使ってみています。今のところ全てブロックできているようです。
 今のところは大丈夫なようですが、スパムでないものをブロックしてしまうこともあるかもしれません。ご了承ください。

Comments (0)
Page 6 of 6« First...23456

HTML convert time: 0.466 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo