<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sun Limited Mt. &#187; WordPress</title>
	<atom:link href="http://www.syuhari.jp/blog/archives/category/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://www.syuhari.jp/blog</link>
	<description>I love iPhone, CakePHP and WordPress.</description>
	<lastBuildDate>Thu, 22 Jul 2010 02:13:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WordCamp Yokohama で LT させて頂きました</title>
		<link>http://www.syuhari.jp/blog/archives/2169</link>
		<comments>http://www.syuhari.jp/blog/archives/2169#comments</comments>
		<pubDate>Mon, 31 May 2010 02:06:50 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[LT]]></category>
		<category><![CDATA[WordCamp]]></category>
		<category><![CDATA[Yokohama]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=2169</guid>
		<description><![CDATA[先日の 5/29 に WordCamp Yokohama で LT をさせて頂きました。
ご聴講頂いた皆様、ありがとうございました。Ustream でも配信されていたのでそちらでご視聴頂いた皆様もありがとうございました。
また、スタッフの皆様、本当にありがとうございました &#038; お疲れ様でした！
発表時の資料をアップしました。ご参考までに。

WordPress 開発事例紹介
View more presentations from Akihiro Matsuura.

]]></description>
			<content:encoded><![CDATA[<p>先日の 5/29 に WordCamp Yokohama で LT をさせて頂きました。<br />
ご聴講頂いた皆様、ありがとうございました。Ustream でも配信されていたのでそちらでご視聴頂いた皆様もありがとうございました。</p>
<p>また、スタッフの皆様、本当にありがとうございました &#038; お疲れ様でした！</p>
<p>発表時の資料をアップしました。ご参考までに。<br />
<span id="more-2169"></span></p>
<div style="width:425px" id="__ss_4357752"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/syuhari/wordpress-4357752" title="WordPress 開発事例紹介" target="_blank" class="liexternal">WordPress 開発事例紹介</a></strong><object id="__sse4357752" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordcamplt-100530205941-phpapp01&#038;stripped_title=wordpress-4357752" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4357752" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordcamplt-100530205941-phpapp01&#038;stripped_title=wordpress-4357752" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" target="_blank" class="liexternal">presentations</a> from <a href="http://www.slideshare.net/syuhari" target="_blank" class="liexternal">Akihiro Matsuura</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/2169/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordCamp Yokohama 5/29 開催！</title>
		<link>http://www.syuhari.jp/blog/archives/2113</link>
		<comments>http://www.syuhari.jp/blog/archives/2113#comments</comments>
		<pubDate>Sat, 01 May 2010 20:45:51 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordCamp]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=2113</guid>
		<description><![CDATA[WordCamp が横浜で 5/29 に開催されます。会場は都筑区にある東京都市大学です。
実は開催されることはずいぶん前に知っていたのですが、チェックを怠り受付が開始されていることを知りませんでした。慌てて参加登録しましたが、懇親会は既に満員でした（まあ懇親会は行きたいのですが、行けるか分からないのであれなのですが。）

]]></description>
			<content:encoded><![CDATA[<p>WordCamp が横浜で 5/29 に開催されます。会場は都筑区にある東京都市大学です。</p>
<p>実は開催されることはずいぶん前に知っていたのですが、チェックを怠り受付が開始されていることを知りませんでした。慌てて参加登録しましたが、懇親会は既に満員でした（まあ懇親会は行きたいのですが、行けるか分からないのであれなのですが。）</p>
<p><a href="http://yokohama2010.wordcamp.jp/" target="_blank"><img src="http://www.syuhari.jp/blog/wp-content/uploads/2010/05/468_60_banner.jpg" alt="468_60_banner" title="468_60_banner" width="468" height="60" class="alignnone size-full wp-image-2114" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/2113/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[WordPress] 予約投稿が失敗するときの対処法</title>
		<link>http://www.syuhari.jp/blog/archives/1941</link>
		<comments>http://www.syuhari.jp/blog/archives/1941#comments</comments>
		<pubDate>Thu, 03 Dec 2009 07:55:43 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cron]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1941</guid>
		<description><![CDATA[WordPress では投稿の公開日時を予約することができます。しかし、予約投稿がうまく動作しないことがあります。予約投稿が失敗するときの解決方法です。
WordPress の予約投稿の仕組み
予約投稿は cron などで動作しているのではなく、ブログへのアクセスをトリガーにした疑似 cron になっています。
wp-includes/cron.php の wp_cron 関数で現在時刻で実行すべきイベントがあるかチェックしてあればそのイベントに起動します。

予約投稿では予約時刻が過ぎている投稿があると、publish_future_post というイベントが予約日時とともに登録されます。ブログへのアクセス時に wp_cron 関数で publish_future_post というイベントがあり、実行日時を過ぎていると、spawn_cron 関数が呼ばれます。この関数で WordPress のトップレベルにある wp_cron.php に HTTP リクエストを発行します。
wp-cron.php では処理すべきイベントに publish_future_post があると、wp-includes/posts.php の wp_publish_post 関数を呼びます。wp_publish_post 関数では、投稿の状態を公開状態に変更して、管理画面から行うのと同じ処理で編集、保存処理を行います。
予約投稿が失敗するときのチェックポイント
サーバに SSH で接続して、以下のコマンドを実行します。

$ wget http://example.com/wp-cron.php

このコマンドを実行して、サーバレスポンスで 200 が返ってくれば問題ありません。失敗している原因は他にあります。
もし、200 が返って来ないときや、接続ができないようなときはサーバ内から自ドメインの名前解決ができていないことが原因かもしれません。
予約投稿の仕組みで説明したように、WordPress は自分自身に対して HTTP リクエストを出します。そのために自分のドメインがサーバで解決できないとアクセスできずに予約投稿が失敗します。
解決策は /etc/hosts に以下のように指定します。

127.0.0.1 example.com

ググっていると WordPress2.7 にしてから予約投稿が失敗するようになったという現象がちらほらあります。また、wp-includes/cron.php を WordPress2.7 以前のものにすると成功するというような話もあります。これは 2.7 から現在のように HTTP リクエストを出して予約投稿を公開状態にするようになったためだと思われます。
2.7 以前はソケット接続して wp-cron.php を呼び出していました。しかし、予約投稿すると ping [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress では投稿の公開日時を予約することができます。しかし、予約投稿がうまく動作しないことがあります。予約投稿が失敗するときの解決方法です。</p>
<h4>WordPress の予約投稿の仕組み</h4>
<p>予約投稿は cron などで動作しているのではなく、ブログへのアクセスをトリガーにした疑似 cron になっています。<br />
wp-includes/cron.php の wp_cron 関数で現在時刻で実行すべきイベントがあるかチェックしてあればそのイベントに起動します。<br />
<span id="more-1941"></span><br />
予約投稿では予約時刻が過ぎている投稿があると、publish_future_post というイベントが予約日時とともに登録されます。ブログへのアクセス時に wp_cron 関数で publish_future_post というイベントがあり、実行日時を過ぎていると、spawn_cron 関数が呼ばれます。この関数で WordPress のトップレベルにある wp_cron.php に HTTP リクエストを発行します。</p>
<p>wp-cron.php では処理すべきイベントに publish_future_post があると、wp-includes/posts.php の wp_publish_post 関数を呼びます。wp_publish_post 関数では、投稿の状態を公開状態に変更して、管理画面から行うのと同じ処理で編集、保存処理を行います。</p>
<h4>予約投稿が失敗するときのチェックポイント</h4>
<p>サーバに SSH で接続して、以下のコマンドを実行します。</p>
<pre class="shell">
$ wget http://example.com/wp-cron.php
</pre>
<p>このコマンドを実行して、サーバレスポンスで 200 が返ってくれば問題ありません。失敗している原因は他にあります。<br />
もし、200 が返って来ないときや、接続ができないようなときはサーバ内から自ドメインの名前解決ができていないことが原因かもしれません。</p>
<p>予約投稿の仕組みで説明したように、WordPress は自分自身に対して HTTP リクエストを出します。そのために自分のドメインがサーバで解決できないとアクセスできずに予約投稿が失敗します。</p>
<p>解決策は /etc/hosts に以下のように指定します。</p>
<pre class="shell">
127.0.0.1 example.com
</pre>
<p>ググっていると WordPress2.7 にしてから予約投稿が失敗するようになったという現象がちらほらあります。また、wp-includes/cron.php を WordPress2.7 以前のものにすると成功するというような話もあります。これは 2.7 から現在のように HTTP リクエストを出して予約投稿を公開状態にするようになったためだと思われます。</p>
<p>2.7 以前はソケット接続して wp-cron.php を呼び出していました。しかし、予約投稿すると ping が送信されないなどの不具合がありました。多分これを解消するために、通常の編集、保存処理をして公開するように HTTP リクエストを出すようにしたのでしょう。ですので、cron.php を書き換えての対処方法はオススメできません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1941/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mac で poファイルを moファイルに変換する方法</title>
		<link>http://www.syuhari.jp/blog/archives/1835</link>
		<comments>http://www.syuhari.jp/blog/archives/1835#comments</comments>
		<pubDate>Mon, 28 Sep 2009 05:12:54 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[mo]]></category>
		<category><![CDATA[po]]></category>
		<category><![CDATA[Terminal]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1835</guid>
		<description><![CDATA[多国語対応させるために gettext を使用します。WordPress などでも使われています。ざっくり説明すると、まずエディタで po ファイルを作成して、それをバイナリの mo ファイルに変換します。gettext はこの mo ファイルを使用して各国語に変換します。
Windows では poEdit など専用のソフトがありますが、Mac では手頃なソフトがないのでエディタで編集して msgfmt コマンドを使用して mo ファイルに変換します。

以下、変換方法です。

まず適当なエディタで編集する po ファイルを開き編集
ターミナルから以下のコマンドで mo ファイルに変換

$ msgfmt -o /path/to/file.mo /path/to/file.po



]]></description>
			<content:encoded><![CDATA[<p>多国語対応させるために gettext を使用します。WordPress などでも使われています。ざっくり説明すると、まずエディタで po ファイルを作成して、それをバイナリの mo ファイルに変換します。gettext はこの mo ファイルを使用して各国語に変換します。</p>
<p>Windows では poEdit など専用のソフトがありますが、Mac では手頃なソフトがないのでエディタで編集して msgfmt コマンドを使用して mo ファイルに変換します。<br />
<span id="more-1835"></span><br />
以下、変換方法です。</p>
<ol>
<li>まず適当なエディタで編集する po ファイルを開き編集</li>
<li>ターミナルから以下のコマンドで mo ファイルに変換
<pre class="shell">
$ msgfmt -o /path/to/file.mo /path/to/file.po
</pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1835/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[WordPress] サイドバーウィジェットに対応したプラグイン作成方法</title>
		<link>http://www.syuhari.jp/blog/archives/1821</link>
		<comments>http://www.syuhari.jp/blog/archives/1821#comments</comments>
		<pubDate>Thu, 17 Sep 2009 01:01:30 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[sidebar]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1821</guid>
		<description><![CDATA[WordPress でサイドバーウィジットに対応したプラグイン方法です。
管理画面にウィジェットを表示する
管理画面の「外観」>「ウィジェット」にウィジェットを表示する。

function widget_control() {
  echo "My Widget";
}
register_widget_control('Widget Name', 'widget_control');

以下のように表示されます。


このウィジェットをサイドバーにドラッグ&#038;ドロップすると以下のようになります。

ウィジェットの表示
ブログのサイドバーを表示した際に出力する内容を設定する。

function widget_view() {
  echo "My Widget";
}
register_sidebar_widget('Widget Name', 'widget_view');

ウィジェットのオプションを設定する
サイドバーにドラッグ&#038;ドロップした後に、ウィジェットのオプションを設定できるようにします。
widget_control 関数を下記のように変更します。値を設定できるような HTML タグを出力することと、POST された値を options に保存する処理を追加しています。

function widget_control() {
  if (isset($_POST['mywidget_value'])) {
    update_option('mywidget_option', $_POST['mywidget_value']);
  }
  $option = get_option('mywidget_option');
  echo "My Widget";
  echo "&#60;input type='text' name='mywidget_value' value='".$option."' /&#62;";
}

これで以下のように表示されます。

あとは widget_view関数の方で get_option() で設定した値を取得して表示に反映させたりします。
管理画面のウィジェットに説明を入れる
上記の例では、管理画面のウィジェット一覧でウィジェットの説明がウィジェット名と同じです。他のウィジェットと同様に説明を入れるには以下のようにします。

$options['description'] [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress でサイドバーウィジットに対応したプラグイン方法です。</p>
<h4>管理画面にウィジェットを表示する</h4>
<p>管理画面の「外観」>「ウィジェット」にウィジェットを表示する。</p>
<pre class="php" name="code">
function widget_control() {
  echo "My Widget";
}
register_widget_control('Widget Name', 'widget_control');
</pre>
<p>以下のように表示されます。<br />
<img src="http://www.syuhari.jp/blog/wp-content/uploads/2009/09/スクリーンショット（2009-09-17-9-17木-9.26.27）.png" alt="スクリーンショット（2009-09-17 9-17木 9.26.27）" title="スクリーンショット（2009-09-17 9-17木 9.26.27）" width="267" height="70" class="size-full wp-image-1822" /><br />
<span id="more-1821"></span><br />
このウィジェットをサイドバーにドラッグ&#038;ドロップすると以下のようになります。<br />
<img src="http://www.syuhari.jp/blog/wp-content/uploads/2009/09/スクリーンショット（2009-09-17-9-17木-9.26.59）.png" alt="スクリーンショット（2009-09-17 9-17木 9.26.59）" title="スクリーンショット（2009-09-17 9-17木 9.26.59）" width="309" height="165" class="size-full wp-image-1823" /></p>
<h4>ウィジェットの表示</h4>
<p>ブログのサイドバーを表示した際に出力する内容を設定する。</p>
<pre class="php" name="code">
function widget_view() {
  echo "My Widget";
}
register_sidebar_widget('Widget Name', 'widget_view');
</pre>
<h4>ウィジェットのオプションを設定する</h4>
<p>サイドバーにドラッグ&#038;ドロップした後に、ウィジェットのオプションを設定できるようにします。<br />
widget_control 関数を下記のように変更します。値を設定できるような HTML タグを出力することと、POST された値を options に保存する処理を追加しています。</p>
<pre class="php" name="code">
function widget_control() {
  if (isset($_POST['mywidget_value'])) {
    update_option('mywidget_option', $_POST['mywidget_value']);
  }
  $option = get_option('mywidget_option');
  echo "My Widget";
  echo "&lt;input type='text' name='mywidget_value' value='".$option."' /&gt;";
}
</pre>
<p>これで以下のように表示されます。<br />
<img src="http://www.syuhari.jp/blog/wp-content/uploads/2009/09/スクリーンショット（2009-09-17-9-17木-9.50.17）.png" alt="スクリーンショット（2009-09-17 9-17木 9.50.17）" title="スクリーンショット（2009-09-17 9-17木 9.50.17）" width="305" height="177" class="size-full wp-image-1825" /></p>
<p>あとは widget_view関数の方で get_option() で設定した値を取得して表示に反映させたりします。</p>
<h4>管理画面のウィジェットに説明を入れる</h4>
<p>上記の例では、管理画面のウィジェット一覧でウィジェットの説明がウィジェット名と同じです。他のウィジェットと同様に説明を入れるには以下のようにします。</p>
<pre class="php" name="code">
$options['description'] = 'My Widget Description';
wp_register_sidebar_widget('Widget Name', 'Widget Name', 'widget_control' ,$options);
</pre>
<p>$options['description'] に設定した文字列がウィジェット名の下に説明として表示されます。<br />
<img src="http://www.syuhari.jp/blog/wp-content/uploads/2009/09/スクリーンショット（2009-09-17-9-17木-9.42.07）.png" alt="スクリーンショット（2009-09-17 9-17木 9.42.07）" title="スクリーンショット（2009-09-17 9-17木 9.42.07）" width="267" height="65" class="size-full wp-image-1824" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1821/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[WordPress] カスタマイズした wpdb クラスを使用する方法</title>
		<link>http://www.syuhari.jp/blog/archives/1782</link>
		<comments>http://www.syuhari.jp/blog/archives/1782#comments</comments>
		<pubDate>Tue, 08 Sep 2009 07:25:58 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[DB]]></category>
		<category><![CDATA[wpdb]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1782</guid>
		<description><![CDATA[WordPress で DB にアクセスするには wpdb クラスを使います。グローバル変数 $wpdb でアクセスすることが可能です。
この辺のことは以下のエントリをご参考ください。
WordPress の設定を使ってデータベースにアクセスする方法
しかし、WordPress をカスタマイズする際にプラグインやテーマだけではどうしても出来ずに DB とのやり取りをカスタマイズしたい場合が出て来た時に、wpdb クラスを直接カスタマイズするのはバージョンアップの時などを考えるとやりたくありません。

そういう場合に有効な方法が wp-content/db.php をいうファイルを使う方法です。wpdb クラスは wp-includes/wp-db.php で定義されていますが、それを読み込んでいるのは wp-includes/functions.php の require_wp_db という関数です。その関数のコードは以下のようになっています。

/**
 * Load the correct database class file.
 *
 * This function is used to load the database class file either at runtime or by
 * wp-admin/setup-config.php We must globalise $wpdb to ensure that [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress で DB にアクセスするには wpdb クラスを使います。グローバル変数 $wpdb でアクセスすることが可能です。<br />
この辺のことは以下のエントリをご参考ください。<br />
<a href="http://www.syuhari.jp/blog/archives/410" class="liinternal">WordPress の設定を使ってデータベースにアクセスする方法</a></p>
<p>しかし、WordPress をカスタマイズする際にプラグインやテーマだけではどうしても出来ずに DB とのやり取りをカスタマイズしたい場合が出て来た時に、wpdb クラスを直接カスタマイズするのはバージョンアップの時などを考えるとやりたくありません。<br />
<span id="more-1782"></span><br />
そういう場合に有効な方法が wp-content/db.php をいうファイルを使う方法です。wpdb クラスは wp-includes/wp-db.php で定義されていますが、それを読み込んでいるのは wp-includes/functions.php の require_wp_db という関数です。その関数のコードは以下のようになっています。</p>
<pre class="php" name="code">
/**
 * Load the correct database class file.
 *
 * This function is used to load the database class file either at runtime or by
 * wp-admin/setup-config.php We must globalise $wpdb to ensure that it is
 * defined globally by the inline code in wp-db.php.
 *
 * @since 2.5.0
 * @global $wpdb WordPress Database Object
 */
function require_wp_db() {
	global $wpdb;
	if ( file_exists( WP_CONTENT_DIR . '/db.php' ) )
		require_once( WP_CONTENT_DIR . '/db.php' );
	else
		require_once( ABSPATH . WPINC . '/wp-db.php' );
}
</pre>
<p>wp-content/db.php というファイルは素の WordPress にはないのですが、このファイルを作っておくと wp-db.php をインクルードせずに db.php をインクルードしてくれるようになります。つまり wpdb クラスのカスタマイズが可能ということです。</p>
<p>wp-content/db.php で以下のような感じで wpdb クラスを継承したクラスを定義してそのクラスのインスタンスを $wpdb に入れておけば、WordPress 全体でカスタマイズした wpdb クラスを使用することができます。</p>
<pre class="php" name="code">
require_once( ABSPATH . WPINC . '/wp-db.php' );
class my_wpdb extends wpdb {
    // カスタマイズしたい wpdb のメソッドをオーバーライドする
}
if ( ! isset($wpdb) ) {
    $wpdb = new my_wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1782/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[WordPress]ダッシュボードに情報を表示するプラグインの作り方</title>
		<link>http://www.syuhari.jp/blog/archives/1786</link>
		<comments>http://www.syuhari.jp/blog/archives/1786#comments</comments>
		<pubDate>Tue, 08 Sep 2009 07:24:07 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1786</guid>
		<description><![CDATA[WordPress のダッシュボードに情報を表示するプラグインを作成する方法です。
まず簡単な雛形から紹介

function my_plugin_dashboard_test() {
    echo "ダッシュボードに表示する内容";
}
function my_plugin_dashboard_setup() {
	wp_add_dashboard_widget( 'my_plugin_dashboard_test', __( 'Widget Title' ),  'my_plugin_dashboard_test');
}
add_action('wp_dashboard_setup', 'my_plugin_dashboard_setup');


ダッシュボードから設定を変更する方法
ダッシュボードウィジットによってはウィジットの右上に「設定」というリンクがあり、クリックすると値などを変更できるものがあります。
wp_add_dashboard_widget 関数は wp-admin/includes/dashboard.php で以下のように定義されています。

function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null )

最初の例では第４引数の $controll_callback は定義していません。この $control_callback を設定するとダッシュボードウィジットに「設定」というリンクがつきます。この設定をクリックすると、$control_callback で指定した関数で出力した内容が表示されます。この表示は以下のようになります。

&#60;form action=&#34;&#34; method=&#34;post&#34; class=&#34;dashboard-widget-control-form&#34;&#62;
ここに $control_callback で出力した内容が表示される
&#60;p class='submit'&#62;
&#60;input type='hidden' name='widget_id' value='suzuki_news_dashboard_test' /&#62;
&#60;input type='submit' value='実行' /&#62;
&#60;/p&#62;
&#60;/form&#62;

つまり、$controll_callback で指定した関数でフォームの内容を出力すれば、それを POST で受け取れます。例えば $controll_callback に my_plugin_option と設定すれば、以下のようにして [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress のダッシュボードに情報を表示するプラグインを作成する方法です。</p>
<h4>まず簡単な雛形から紹介</h4>
<pre class="php" name="code">
function my_plugin_dashboard_test() {
    echo "ダッシュボードに表示する内容";
}
function my_plugin_dashboard_setup() {
	wp_add_dashboard_widget( 'my_plugin_dashboard_test', __( 'Widget Title' ),  'my_plugin_dashboard_test');
}
add_action('wp_dashboard_setup', 'my_plugin_dashboard_setup');
</pre>
<p><span id="more-1786"></span></p>
<h4>ダッシュボードから設定を変更する方法</h4>
<p>ダッシュボードウィジットによってはウィジットの右上に「設定」というリンクがあり、クリックすると値などを変更できるものがあります。</p>
<p>wp_add_dashboard_widget 関数は wp-admin/includes/dashboard.php で以下のように定義されています。</p>
<pre class="php" name="code">
function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null )
</pre>
<p>最初の例では第４引数の $controll_callback は定義していません。この $control_callback を設定するとダッシュボードウィジットに「設定」というリンクがつきます。この設定をクリックすると、$control_callback で指定した関数で出力した内容が表示されます。この表示は以下のようになります。</p>
<pre class="html" name="code">
&lt;form action=&quot;&quot; method=&quot;post&quot; class=&quot;dashboard-widget-control-form&quot;&gt;
ここに $control_callback で出力した内容が表示される
&lt;p class='submit'&gt;
&lt;input type='hidden' name='widget_id' value='suzuki_news_dashboard_test' /&gt;
&lt;input type='submit' value='実行' /&gt;
&lt;/p&gt;
&lt;/form&gt;
</pre>
<p>つまり、$controll_callback で指定した関数でフォームの内容を出力すれば、それを POST で受け取れます。例えば $controll_callback に my_plugin_option と設定すれば、以下のようにして options テーブルに値を入れておくことも可能です。</p>
<pre class="php" name="code">
function my_plugin_option() {
  if ( 'post' == strtolower($_SERVER['REQUEST_METHOD']) &#038;&#038;
       isset( $_POST['widget_id'] ) &#038;&#038;
       'my_plugin_dashboard_test' == $_POST['widget_id'] ) {
    foreach ( array( 'hoge', 'foo' ) as $key )
      $options[$key] = $_POST[$key];
      update_option( 'my_plugin_dashboard', $options );
    }
  }

  // form に表示する内容
}
</pre>
<p>ちなみに $controll_callback 関数で出力する内容は「設定」をクリックしたときに実行されるのではなく、ダッシュボードが表示されたときに実行され、CSS により非表示になっているだけです。</p>
<p>参考 URL<br />
<a href="http://rick.jinlabs.com/2009/02/01/how-add-options-to-your-wordpress-27-dashboard-widgets/" target="_blank" class="liexternal">Rick’s HideOut – How add options to your WordPress 2.7 dashboard widgets &#8211; Archivo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1786/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSL 通信で Flash Player は自己署名証明書を受け付けない</title>
		<link>http://www.syuhari.jp/blog/archives/1756</link>
		<comments>http://www.syuhari.jp/blog/archives/1756#comments</comments>
		<pubDate>Fri, 28 Aug 2009 00:47:30 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[SWFUpload]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1756</guid>
		<description><![CDATA[WordPress の Flash Uploader が管理画面を SSL にしたところ &#8220;IO error&#8221; と出てアップロードできなくなってしまった。HTML アップローダーでは問題なくアップロードできる。


調べたところ、以下の Adobe の Tech Note に回答があった。
SSL 通信における Flash Player の問題
Flash Player ActiveX コントロールは、ブラウザに手動で追加されたもの以外の自己署名証明書（Self-Signed Certificate）を信用しません。この問題は、ユーザがテストサーバにインストールされた完全な SSL 認証を望まない場合、テスト環境でよく見られる現象です。
テストサーバの SSL 証明書が正式なものではなく自己署名証明書だったのが原因のようでした。
参考サイト
SSL経由でSWFUploadするとIO Error（#2038）が発生する « 岩家ぶろぐ
]]></description>
			<content:encoded><![CDATA[<p>WordPress の Flash Uploader が管理画面を SSL にしたところ &#8220;IO error&#8221; と出てアップロードできなくなってしまった。HTML アップローダーでは問題なくアップロードできる。</p>
<p><img src="http://www.syuhari.jp/blog/wp-content/uploads/2009/08/ピクチャ-12.png" alt="ピクチャ 1" title="ピクチャ 1" width="352" height="213" class="alignnone size-full wp-image-1758" /><br />
<span id="more-1756"></span><br />
調べたところ、以下の Adobe の Tech Note に回答があった。<br />
<a href="http://www.adobe.com/jp/support/kb/ts/228/ts_228476_ja-jp.html" target="_blank" class="liexternal">SSL 通信における Flash Player の問題</a></p>
<blockquote><p>Flash Player ActiveX コントロールは、ブラウザに手動で追加されたもの以外の自己署名証明書（Self-Signed Certificate）を信用しません。この問題は、ユーザがテストサーバにインストールされた完全な SSL 認証を望まない場合、テスト環境でよく見られる現象です。</p></blockquote>
<p>テストサーバの SSL 証明書が正式なものではなく自己署名証明書だったのが原因のようでした。</p>
<p>参考サイト<br />
<a href="http://blog.iwa-ya.net/2009/07/29/100830" target="_blank" class="liexternal">SSL経由でSWFUploadするとIO Error（#2038）が発生する « 岩家ぶろぐ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1756/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Mu のアクション一覧</title>
		<link>http://www.syuhari.jp/blog/archives/1748</link>
		<comments>http://www.syuhari.jp/blog/archives/1748#comments</comments>
		<pubDate>Fri, 21 Aug 2009 07:06:01 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[WordPress Mu]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1748</guid>
		<description><![CDATA[WordPress でプラグインを作成するときに、アクション・フックを使うことが多くなります。WordPress のアクションフックは下記のページで一覧になっていますが、WordPress Mu で追加されたアクションフックの一覧は探してみても見つかりませんでした。
プラグイン API/アクションフック一覧 &#8211; WordPress Codex 日本語版
そこで、自分で一覧を作成してみました。作成方法は wpmu- で始まるソースから do_action を探してアクション名を拾いました。一部 WordPress 用のアクションも入っているかもしれません。また漏れがあるかもしれませんが、これで WordPress Mu 用のプラグイン作成時にかなり助かりましたので、参考までに載せておきます。使用した WordPress Mu のバージョンは 2.8.2 です。

アクション名からだいたいアクションの概要は分かるかと思います。


アクション名
引数

activate_blog
 $id


activate_sitewide_plugin
 $plugin


add_user_to_blog
 $user_id, $role, $blog_id


added_existing_user
 $user_id


archive_blog
 $id


deactivate_blog
 $id


deactivate_sitewide_plugin
 $plugin


make_ham_blog
 $id


make_spam_blog
 $id


manage_blogs_custom_column
 $column_name, $blog_id


manage_users_custom_column
 $column_name, $user_id


mature_blog
 $id


mu_activity_box_end



mu_rightnow_end



remove_user_from_blog
 $user_id, $blog_id


switch_blog
 $blog_id, $prev_blog_id


unarchive_blog
 $id


unmature_blog
 $id


unspam_blog
 $id


update_blog_public



update_wpmu_options



wpmu_activate_blog
 $blog_id, $user_id, $password, $title, $meta


wpmu_activate_user
 $user_id, $password, $meta


wpmu_blog_updated
 [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress でプラグインを作成するときに、アクション・フックを使うことが多くなります。WordPress のアクションフックは下記のページで一覧になっていますが、WordPress Mu で追加されたアクションフックの一覧は探してみても見つかりませんでした。</p>
<p><a href="http://wpdocs.sourceforge.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7" target="_blank" class="liexternal">プラグイン API/アクションフック一覧 &#8211; WordPress Codex 日本語版</a></p>
<p>そこで、自分で一覧を作成してみました。作成方法は wpmu- で始まるソースから do_action を探してアクション名を拾いました。一部 WordPress 用のアクションも入っているかもしれません。また漏れがあるかもしれませんが、これで WordPress Mu 用のプラグイン作成時にかなり助かりましたので、参考までに載せておきます。使用した WordPress Mu のバージョンは 2.8.2 です。<br />
<span id="more-1748"></span><br />
アクション名からだいたいアクションの概要は分かるかと思います。</p>
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<th>アクション名</th>
<th>引数</th>
<tr>
<td>activate_blog</td>
<td> $id</td>
</tr>
<tr>
<td>activate_sitewide_plugin</td>
<td> $plugin</td>
</tr>
<tr>
<td>add_user_to_blog</td>
<td> $user_id, $role, $blog_id</td>
</tr>
<tr>
<td>added_existing_user</td>
<td> $user_id</td>
</tr>
<tr>
<td>archive_blog</td>
<td> $id</td>
</tr>
<tr>
<td>deactivate_blog</td>
<td> $id</td>
</tr>
<tr>
<td>deactivate_sitewide_plugin</td>
<td> $plugin</td>
</tr>
<tr>
<td>make_ham_blog</td>
<td> $id</td>
</tr>
<tr>
<td>make_spam_blog</td>
<td> $id</td>
</tr>
<tr>
<td>manage_blogs_custom_column</td>
<td> $column_name, $blog_id</td>
</tr>
<tr>
<td>manage_users_custom_column</td>
<td> $column_name, $user_id</td>
</tr>
<tr>
<td>mature_blog</td>
<td> $id</td>
</tr>
<tr>
<td>mu_activity_box_end</td>
<td></td>
</tr>
<tr>
<td>mu_rightnow_end</td>
<td></td>
</tr>
<tr>
<td>remove_user_from_blog</td>
<td> $user_id, $blog_id</td>
</tr>
<tr>
<td>switch_blog</td>
<td> $blog_id, $prev_blog_id</td>
</tr>
<tr>
<td>unarchive_blog</td>
<td> $id</td>
</tr>
<tr>
<td>unmature_blog</td>
<td> $id</td>
</tr>
<tr>
<td>unspam_blog</td>
<td> $id</td>
</tr>
<tr>
<td>update_blog_public</td>
<td></td>
</tr>
<tr>
<td>update_wpmu_options</td>
<td></td>
</tr>
<tr>
<td>wpmu_activate_blog</td>
<td> $blog_id, $user_id, $password, $title, $meta</td>
</tr>
<tr>
<td>wpmu_activate_user</td>
<td> $user_id, $password, $meta</td>
</tr>
<tr>
<td>wpmu_blog_updated</td>
<td> $blog_id</td>
</tr>
<tr>
<td>wpmu_new_blog</td>
<td> $blog_id, $user_id</td>
</tr>
<tr>
<td>wpmu_new_user</td>
<td> $user_id</td>
</tr>
<tr>
<td>wpmu_options</td>
<td></td>
</tr>
<tr>
<td>wpmu_update_blog_options</td>
<td></td>
</tr>
<tr>
<td>wpmuadminedit</td>
<td> </td>
</tr>
<tr>
<td>wpmuadminresult</td>
<td> </td>
</tr>
<tr>
<td>wpmublogsaction</td>
<td> $blog_id</td>
</tr>
<tr>
<td>wpmueditblogaction</td>
<td> $id</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1748/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[WordPress] ユーザ情報を取得する方法</title>
		<link>http://www.syuhari.jp/blog/archives/1718</link>
		<comments>http://www.syuhari.jp/blog/archives/1718#comments</comments>
		<pubDate>Fri, 14 Aug 2009 01:59:43 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1718</guid>
		<description><![CDATA[WordPress でユーザ情報を取得する方法です。
取得できる情報は wp_users テーブル、wp_usermeta テーブルの情報です。
ログインしているユーザ情報を取得する

$user = wp_get_current_user();


ユーザID を指定してユーザ情報を取得する

$user = new WP_User($user_id);

]]></description>
			<content:encoded><![CDATA[<p>WordPress でユーザ情報を取得する方法です。<br />
取得できる情報は wp_users テーブル、wp_usermeta テーブルの情報です。</p>
<h4>ログインしているユーザ情報を取得する</h4>
<pre class="php" name="code">
$user = wp_get_current_user();
</pre>
<p><span id="more-1718"></span></p>
<h4>ユーザID を指定してユーザ情報を取得する</h4>
<pre class="php" name="code">
$user = new WP_User($user_id);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1718/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
