ジャンル別」カテゴリーアーカイブ

Feed Template Customize

久しぶりに新規 WordPress Plugin を公開しました。
WordPress > Feed Template Customize « WordPress Plugins

このプラグインを使用すると RSS フィードや ATOM フィードのテンプレートを自由に変更できます。
それぞれ、以下のファイルがテーマフォルダ内にあるとフィードテンプレートとして使用します。

  • feed-atom.php atom フィード用テンプレート
  • feed-atom-comments.php atom コメントフィード用テンプレート
  • feed-rdf.php rdf フィード用テンプレート
  • feed-rss.php rss フィード用テンプレート
  • feed-rss2.php rss 2.0 フィード用テンプレート
  • feed-rss2-comments.php rss 2.0 コメントフィード用テンプレート

※上記ファイルがテーマフォルダ内に無い場合は WordPress 標準のフィードテンプレートが適用されます。

これらのテンプレートの元ファイルとしては、wp-include フォルダ内の同名のファイルをテーマフォルダ内にコピーして使用すれば良いでしょう。

元々、公開していたスニペットをプラグイン化しただけなんすけどね 🙂
各種フィード用テンプレートの変更

uninstall.php

WordPress でプラグインを無効化したときにオプションを消すには

uninstall.phpWordPressプラグインで生成したテーブルをプラグインアンインストール時に削除する方法について、twitterでゴチャゴチャ話していたら、@takayukister さんに良いことを教えてもらいました。
via. Twitter / @takayukister: @miya0001 @wokamoto 二人が話して
プラグインディレクトリの中に uninstall.php を設置するか、プラグインディレクトリの中に、register_uninstall_hook() を使用すれば WordPress の管理画面からプラグインを削除する時に動作する処理を記述できるようです。
この辺の処理方法について、早速 @miya0001 さんがまとめてくれてます。

ただ、この方法だと削除時にしか動作しないんすよね。
できれば、無効化したときにも wp-options テーブルから消したい。
でも、一時的に無効化して、あとで有効化する場合にはオプション消されちゃうと再設定しなきゃだから辛いしなぁ..
とか、考えてたんですが、良い方法を思いつきました。
続きを読む

WordPress コメント欄の URL 変換がおかしい気がする

WordPress ではコメント欄に URL が書き込まれると、自動的に <a> タグに変換してくれます。
これを実現しているのが、wp-includes\default-filters.php に記述してあるフィルターフック add_filter( 'comment_text', 'make_clickable', 9 ); と、wp-includes\formatting.php に記述してある make_clickable() 関数。
しかし、この make_clickable() 関数内で使用している正規表現が適切では無いため、全角文字も URL として処理されてしまいます。
これにより URL の後ろにスペースが入らず、そのままコメントが続いてしまうと、嫌な感じに整形されてしまいます。

URLに使える文字列を規定している RFC2396 によると、URLとして使える文字は reserved | unreserved | escaped の3種類です。
大雑把にまとめると

  • reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
  • unreserved = alphanum (英数字) | mark ( "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" )
  • escaped = "%" hex hex
    ※日本語などの unreserved 以外の文字は16進数のコードに変換後、頭に % をつけてエスケープする。

続きを読む

WordPress マルチサイト版の高速化アイデア

WordPress をマルチサイトで使用していると、画像のURLが以下のような感じになると思います。

http://hoge.example.com/files/2011/05/fuga.jpg

しかし、実際にはサーバ上には /files/2011/05/fuga.jpg ってファイルは存在してません。
WordPress が、どうやってこのファイルを処理しているかというと

  1. wp-includes/rewrite.php の WP_Rewrite クラスで wp-includes/ms-files.php?file=2011/05/fuga.jpg に書き換え
  2. wp-includes/ms-files.php で、/wp-content/blogs.dir/{blog ID}/files/2011/05/fuga.jpg を読み込んで出力

つまり、静的ファイルにアクセスするためにわざわざ WordPress のプロセスを起動してるわけですね。
これでは、画像をいっぱい張ってある場合、非常に重たくなります。

てなわけで、以下のように設定してやれば wp-includes/ms-files.php を経由しないで、直接 Web サーバに応答させることができるのでは無いの?ってな按配です。
続きを読む

wp_remote_get のススメ

WordPress プラグインで外部サービスのAPIを叩く場合、以前は Snoopy 等のライブラリを include して行っていました。
# Snoopy が WordPress コアソースに含まれていたため。

しかし、WordPress 2.7 以降では wp_remote_get() という関数が追加されたため、もっぱらこれを使っています。
例えば Topsy の API を使って、パーマリンクに対して言及されたツイートを取得するには以下のようなコードを書けば実現できます。

$response = wp_remote_get('http://otter.topsy.com/trackbacks.json?url='.rawurlencode(get_permalink()).'&tracktype=tweet&perpage=50');
if( !is_wp_error( $response ) && $response["response"]["code"] === 200 ) {
	$response_body = json_decode($response["body"]);
	var_dump($response_body->response->list[0]);
} else {
	// Handle error here.
}

簡単でしょ?

以下、簡単に wp_remote_get の使い方
続きを読む

WordPressで、特定のエントリーについたコメントをCSVで一括DLできる方法とかないかな

Comment Downloader

WordPressで、特定のエントリーについたコメントをCSVで一括DLできる方法とかないかな@tunakko_ さんが、「WordPressで、特定のエントリーについたコメントをCSVで一括DLできる方法とかないかな」とか言ってたので、任意のエントリに着いたコメントの情報をタブ区切りテキストで一括してダウンロードできるプラグイン Comment Downloader を作ってみました。
カンマ区切りではなくタブ区切りなのは、コメント内にカンマが含まれていた時の処理が面倒くさかったため。面倒臭がりですいません。
ソース見てもらえば分かるんですが作りは単純です。
ログインしてないとコメント一覧をダウンロードできないようにしてあるので、勝手にダウンロードされる恐れは無いかと思われます。
このプラグインのダウンロードは以下から。
http://dl.dropbox.com/u/110305/comment-dl.zip

ダッシュボードで投稿一覧画面を表示すると、右端に「この投稿のコメントをダウンロード」ってリンクが表示されるので、それをクリックすると zip 形式で圧縮されたテキストファイルをダウンロードできます。
後は、それを Excel に食わせるなりなんなり好きにしてやってください。

Head Cleaner 1.4.2.x リリース

Head Cleaner をアップデートしました。
WordPress > Head Cleaner « WordPress Plugins

今回の追加機能は以下の2つ。

  • Last-Modified タグ出力オプション
  • パラノイアモードの搭載

パラノイアモードが、どんな機能かというと head 部だけでなく html 全体をなるべく小さくするように不要な改行や連続した空白を取り除いちゃう機能です。
ただ、このパラノイアモードは実験的な機能なので、不具合が出る場合は適用しないでください。
# どんな感じになるかは、当サイトの HTML ソースを見てみてください。

さて、当サイトのトップページがどれくらい小さくなるかというと

HeadCleaner off

45.0 KB
HeadCleaner on without paranoia mode

39.6 KB
HeadCleaner on with paranoia mode

36.4 kB

パラノイアモードオフの場合は12%、パラノイアモードをオンにすると19%サイズダウンしました!

当サイトでは gzip 圧縮が有効になっているため、実際に転送されるファイルのサイズは gzip 圧縮後のサイズになります。
あと Head Cleaner は自サイトの JS, CSS も最小化してくれるため、それらもまとめて見てみた方が良いでしょう。

HeadCleaner off

83.3 KB
HeadCleaner on without paranoia mode

72.3 KB
HeadCleaner on with paranoia mode

72.1 kB

パラノイアモードオフの場合は13.2%、パラノイアモードをオンにすると13.2%サイズダウンしました!
パラノイアモードあまり意味ない orz
続きを読む

WordPress でカテゴリのリンクを変更する

WordPress でカテゴリのリンクを標準以外に変更する方法です。
まぁ、それ専用のプラグインとかも探せば有ると思うんですが

http://example.com/?cid=xx 形式に変更する

例えば、カテゴリのリンクを http://example.com/?cid=xx とかって形式でも表示できるようにするには、以下のようにして parse_query フィルタを使うと良いです。
# functions.php とかに追加してやってください。

class add_category_link_to_different_link {
	function __construct(){
		add_filter('query_vars', array(&$this, 'add_query_vars'));
		add_action('parse_query', array(&$this, 'parse_query'));
	}
	public function add_query_vars($qvars) {
		$qvars[] = 'cid';
		return $qvars;
	}
	public function parse_query($query) {
		$cat_id  = (int) $query->query_vars['cid'];
		if ( !(empty($cat_id) || $cat_id === 0) ) {
			$url = get_category_link($cat_id);
			if ( !empty($url) && $url !== FALSE ) {
				$query->query_vars["cat"] = $cat_id;
				$query->is_404 = false;
			} else {
				$query->set_404();
			}
		}
		return $query;
	}
}
new add_category_link_to_different_link;

続きを読む

WordPress でスニペットを簡単に管理する方法

昨今の WordPress 人気にあやかって、「WordPress スニペット」とか「WordPress functions.php カスタマイズ」とかで検索すると、functions.php を使ってできる簡単なカスタマイズ方法が出てきます。
これらを functions.php で管理してるとテーマを変更した時とか、コピペしなおさなきゃ行けなくなって面倒くさいことこの上ありません。
このカスタマイズやっぱ要らないなーとか思っても、すでにどこに書いていたか分からなくなっちゃうなんてこともしばしば。
そんなわけで、私はこれらのスニペットについては簡単なプラグインを作って管理してます。
# 昔は my-hacks.php ってファイルを使って管理できたんですが、WordPress 2.8 以降から非推奨になっちゃいました。
続きを読む

nginx 1.0.0 が出てます

nginx高速、軽量な HTTP サーバ(かつリバースプロキシサーバ) nginx が開発開始から9年を経て、ようやくメジャーリリース 1.0.0 公開されました。
W3Tecs によれば、Apache, IIS についで第3位の6.8%のシェアを誇るまでになったそうです。
このサイトと私がやってるフォトブログ shot.dogmap.jp も、リバースプロキシサーバとして nginx を使用しています。

nginx の導入方法として過去にも何回かエントリ書いてますので、そちらも読んでやってください。

続きを読む