Tips」タグアーカイブ

WPTouch テーマ切替

WPTouch と Nginx リバースプロキシ

WPTouch テーマ切替WordPress.com でやってるメモブログの方にも書いたんですが、WordPress プラグイン WPtouch を使用しているサイトで Nginx リバースプロキシを利用する際の Tips です。
あっちの方に書いたのは、ほんとにメモ程度なんでコードだけで分かりにくいかなぁと思いまして、こっちで詳細に説明します。

WPTouch や Ktai Style なんかを使ってクライアントのユーザーエージェント(UA)ごとに表示を変えている場合、Nginx でリバースプロキシを使用すると具合が良くありません。
普通に設定した場合、同一URLへのアクセスがあった際は UA に関係なくキャッシュされてしまいます。
この辺を回避するために、Nginx の設定ファイルで UA を判断して proxy_cache_key を変更するってのは、わりかし良く行われている作戦だと思います。
参照: WordPress サイトに nginx を導入する : dogmap.jp
ですが、これだと WP Touch にある Mobile Thema を ON/OFF するボタンに対応できません。
そんで、どうするかと言うと
続きを読む

ssh 接続を簡単にする ~/.ssh/config

Mac のターミナルとかから、サーバに SSH 接続する際に長ったらしいオプションつけてませんか?
例えば、example.com にユーザー wokamoto、秘密鍵 ~/.ssh/id_rsa.example、ポート番号 10022 で接続する際、こんな感じで接続しますよね。

$ ssh -l wokamoto -p 10022 -i ~/.ssh/id_rsa.example example.com

こんなん毎回やってたら、メンドクサイし、タイポも心配。
実は ~/.ssh/config てファイルを用意しておくだけで、これらのオプションを省略することができます。
まぁ、みんな知ってるよねとか思ってたんですが、知らん人も居るみたいなので簡単にやり方を解説しておきます。
続きを読む

WordPress でサムネイルがある記事だけ表示する方法

「WordPress でサムネイルが存在する記事だけ一覧で表示したい」という相談を受けました。

普通に考えると以下のように has_post_thumbnail() を使って条件分岐すれば良さそうですが、これだと1ページに表示される記事数がバラバラになってしまいます。
また、ページネーションも上手く行きません。
(サムネイルが無い記事もページネーションの対象になってしまい、空白ページができてしまう)

<?php if(have_posts()): while(have_posts()): the_post(); ?>
<?php if ( has_post_thumbnail() ) {?>
--内容--
<?php } ?>
<?php endwhile; endif; ?>

こんな時は posts_where フィルターフックを使って、投稿を取得する際の条件文を変更してやりましょう。
続きを読む

Blackbird Pie の吐き出す HTML を修正する

WordPress に簡単に Twitter のツイートを表示する Twitter Blackbird Pie というプラグインがあります。
このプラグイン、ショートコードで簡単にツイートを表示できて便利なんですが、吐き出す HTML がちょっとアレな感じです。

Blackbird Pie は、こんな感じの HTML を吐き出します。

<!-- tweet id : 87798635173130240 -->
<style type="text/css">
	#bbpBox_87798635173130240 a { text-decoration:none; color:#0084B4; }
	#bbpBox_87798635173130240 a:hover { text-decoration:underline; }
</style>
<div id="bbpBox_87798635173130240" class="bbpBox" style="padding: 20px; margin: 5px 0pt; background-color: rgb(192, 222, 237); background-image: url(&quot;http://a3.twimg.com/profile_background_images/53527310/gundam.jpg&quot;);">
	<div style="background: none repeat scroll 0% 0% rgb(255, 255, 255); padding: 10px; margin: 0pt; min-height: 48px; color: rgb(51, 51, 51); border-radius: 5px 5px 5px 5px;">
		<span style="width: 100%; font-size: 18px; line-height: 22px;">Blackbird Pie の WordPress プラグインが吐き出す HTML が、ちょっとアレなので修正した。後でブログに書く。
		<div class="bbp-actions" style="font-size: 12px; width: 100%; padding: 5px 0pt; margin: 0pt 0pt 10px; border-bottom: 1px solid rgb(230, 230, 230);">
			<img src="http://example.com/wp-content/plugins/twitter-blackbird-pie/images/bird.png" align="middle"/><a title="tweeted on 2011年7月4日 17:23" href="http://twitter.com/#%21/wokamoto/status/87798635173130240" target="_blank">2011年7月4日 17:23</a> via <a href="http://ubersocial.com" rel="nofollow" target="blank">UberSocial for BlackBerry</a><a href="https://twitter.com/intent/tweet?in_reply_to=87798635173130240" class="bbp-action bbp-reply-action" title="Reply"><span><em style="margin-left: 1em;"></em><strong>Reply</strong></span></a><a href="https://twitter.com/intent/retweet?tweet_id=87798635173130240" class="bbp-action bbp-retweet-action" title="Retweet"><span><em style="margin-left: 1em;"></em><strong>Retweet</strong></span></a><a href="https://twitter.com/intent/favorite?tweet_id=87798635173130240" class="bbp-action bbp-favorite-action" title="Favorite"><span><em style="margin-left: 1em;"></em><strong>Favorite</strong></span></a></div><div style="float: left; padding: 0pt; margin: 0pt;">
			<a href="http://twitter.com/intent/user?screen_name=wokamoto"><img style="width: 48px; height: 48px; padding-right: 7px; border: medium none; background: none repeat scroll 0% 0% transparent; margin: 0pt;" src="http://a2.twimg.com/profile_images/1357232956/wo_glasses_normal.png"/></a>
		</div>
		<div style="float: left; padding: 0pt; margin: 0pt;"><a style="font-weight: bold;" href="http://twitter.com/intent/user?screen_name=wokamoto">@wokamoto</a><div style="margin: 0pt; padding-top: 2px;">wokamoto</div></div>
		<div style="clear: both;"></div>
	</span></div>
</div>
<!-- end of tweet -->

注意: 構造が分かり易いように改行・インデント入れてます。

何がよろしくないかと言うと2〜5行目なんですが、ハレンチにも <head> 外に <style> タグを吐き出しちゃってます。
まぁ、個別のツイートでリンクの色とか変えたいと思うと、これしか方法が無いと思っちゃったのはしょうがないんですが
続きを読む

どうしても同梱のjQueryが呼び出されてしまいます。今回、ContactForm7がWP同梱のものより上位のjQueryで動くか試そうと思ったところ、こういうことになってしまい…

WordPress 同梱の jQuery 以外を使う方法

どうしても同梱のjQueryが呼び出されてしまいます。今回、ContactForm7がWP同梱のものより上位のjQueryで動くか試そうと思ったところ、こういうことになってしまい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 Editor

WordPress のエディタから、不要なメディアボタンを削除する

WordPress EditorWordPress を、マルチサイト版で利用している場合、エディタ上部に表示されているメディアボタンの表示・非表示はオプションで設定できます。
しかし、シングルサイト版で使用している場合は、これらを制御することはできません。
シングルサイト版でも、制御することは不可能なんでしょうか?

実は media_buttons アクションフックを使用することで、実現可能です。
続きを読む

uninstall.php

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

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

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

ん~、正直なところ、$("#checkboxid").checked()が欲しいっすw

jQuery で checkbox が check されてるか調べる

ん〜、正直なところ、$("#checkboxid").checked()が欲しいっすwTwitter で、@masaru_b_cl さんが、「jQueryでチェックボックスがチェックされているかどうかを取るのって、 var checked = $("#checkboxid").attr("checked"); しか方法ないのか・・・」と言ってました。
jQuery オブジェクトには .checked() とかってメソッドがありません。
なので checkbox がチェックされてるかどうかは、通常以下のようにして取得します。

checked = $("#checkboxid").attr("checked");
checked = $("#checkboxid").get(0).checked;

ただ、これだとあまり直感的じゃないですね。
checked = $("#checkboxid").checked(); のようにして、取得できるとカッコイイです。
本当にできないんでしょうか?
実は .checked() メソッドを jQuery オブジェクトに追加するのは、すごい簡単です。
続きを読む

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 サーバに応答させることができるのでは無いの?ってな按配です。
続きを読む

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

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