Twitter で @mokeco_ さんから「WP関連で質問があります。jQueryをWP同梱のものではなく、google等から引っ張ってきたいと思い、wokamotoさんのサイト http://bit.ly/iiBu1R や http://bit.ly/dYfu1e などを参考にしましたが、どうしても同梱のjQueryが呼び出されてしまいます。今回、ContactForm7がWP同梱のものより上位のjQueryで動くか試そうと思ったところ、こういうことになってしまい…お手数ですが解決法を教えていただけると幸いです。宜しくお願いします。」という質問があったので、それに対する回答。
WordPress には、wp_enqueue_script という仕組みがあり jQuery 等の JavaScript ライブラリを簡単に読み込ませることができます。
ただし、同梱されている jQuery 以外の他の jQuery (例えば Google Libraries API 上の jQuery) を読み込ませようとする場合、これらのデフォルトライブラリは wp_register_script() ですでに登録されているため、一度 wp_deregister_script() してから wp_enqueue_script() してやる必要があります。
# デフォルトで読み込まれる JavaScript ライブラリとそのバージョンは wp-includes/script-loader.php 辺りを眺めればわかるので、興味の有る方はソースを眺めてみてください。
続きを読む
「WordPress」カテゴリーアーカイブ
WordPress Plugin 作者に覚えておいて欲しいこと
WordPress を日本語環境で使用している時、インストールされている WordPress プラグインをダッシュボードで見ると、プラグインの説明のところが日本語表記・英語表記が混在してることがあります。
この説明欄に表示されるのは、プラグインの主たる PHP ファイルの先頭に含まれた標準プラグイン情報ヘッダーの「Description:」という行に書かれた情報です。
プラグインの作成 – WordPress Codex 日本語版
この「Description」行に日本語書いておけば日本語で説明が表示されるんですが、それだと他言語の環境で使ってもらえないプラグインが出来上がってしまいます。
ところで WordPress では gettext を使用して他言語対応しています。
これは、標準プラグイン情報ヘッダーでは適用できないのでしょうか?
続きを読む
WordPress のエディタから、不要なメディアボタンを削除する
WordPress を、マルチサイト版で利用している場合、エディタ上部に表示されているメディアボタンの表示・非表示はオプションで設定できます。
しかし、シングルサイト版で使用している場合は、これらを制御することはできません。
シングルサイト版でも、制御することは不可能なんでしょうか?
実は media_buttons アクションフックを使用することで、実現可能です。
続きを読む
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 フォルダ内の同名のファイルをテーマフォルダ内にコピーして使用すれば良いでしょう。
元々、公開していたスニペットをプラグイン化しただけなんすけどね 🙂
各種フィード用テンプレートの変更
WordPress でプラグインを無効化したときにオプションを消すには
WordPressプラグインで生成したテーブルをプラグインアンインストール時に削除する方法について、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 が、どうやってこのファイルを処理しているかというと…
- wp-includes/rewrite.php の WP_Rewrite クラスで
wp-includes/ms-files.php?file=2011/05/fuga.jpg
に書き換え - 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 の使い方
続きを読む
Comment Downloader
@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
続きを読む