どうしても作りたいプラグインが出来たので試しに作ってみてるが、その際避けて通れないオプション設定ページ。
テーマの独自設定を作りたい時にも使える。
Creating Options Pagesから適当に抜粋。
ページそのものの追加は前のエントリーで紹介してるので省略。

最後の方に設定保存のメカニズムについても適当に解説をつけてみた。

Form Tag

オプションページのソースにフォームタグを追加する。たとえば次のようなもの。

<form method="post" action="options.php">

実際書くときはactionは空で良い。

nonce Magic

フォームタグ追加したらこのPHPコードを書く。

<?php wp_nonce_field('update-options'); ?>/

これは自動で非表示フィールドを2つ追加するソース。

Update Options Button

「設定を保存」ボタンをつける。

<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Update Options »') ?>" />
</p>

_eのところはwordpressの言語ファイルで定義されてるのでそのまま使えば日本語になる。

Field Names

入力フィールドを作る。たとえばこんな感じ。

<input type="text" name="new_option_name" value="<?php echo get_option('new_option_name'); ?>" />

valueにget_option関数を入れておくとオプションを保存したときに自動で更新される。

action Field

valueをupdateにした非表示フィールドactionを追加。

<input type="hidden" name="action" value="update" />

page_options Field

最後に非表示フィールドでpage_optionを追加。
valueにはそのページのオプション名(name)をコンマ区切りで全部書く。

<input type="hidden" name="page_options" value="new_option_name,some_other_option,option_etc" />

Closing Tags

フォームを閉じます。

<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Update Options »') ?>" />
</p>
</form>


前のエントリーのページ追加
で使ったサンプルに全部まとめると次のようになる。

<?php
function sample_page(){
?>
<div class="wrap">
<form method="post" action="">
<input type="hidden" name="action" value="update" />
<input type="hidden" name="page_options" value="new_option_name" />
<?php wp_nonce_field('update-options'); ?>
<p><input type="text" name="new_option_name" value="<?php echo get_option('new_option_name'); ?>" /></p>
<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Update Options »') ?>" />
</p>
</form>
</div>
<?php } ?>

WordPress Options Mechanism

WordPressはデータベースのOptionsテーブルを使って設定を保存します。

  1. オプションとして保存出来る値は、文字・配列・PHPオブジェクトである。
  2. 他のプラグインと衝突しないために、オプション名は独自性のある文字列でなければならない。

phpmyadminか何かで、Optionsテーブルのoption_nameやoption_valueを見るとプラグインの設定が保存されてるのが確認出来ます。

メイン関数。この関数を使うとOptionsにアクセスできる。

add_option($name, $value, $description, $autoload);

これは新しくオプションを作成するが、既に存在する場合は何もしない。

$name(string)
必須。オプションの名前

$value(string)
オプションの値。デフォルトは空の文字列。

$description(string)
デフォルトは空の文字列。オプションの概要。データベースに何かあったときこれが在ると分かりやすいかもしれない。

$autoload
デフォルトは’yes’。yesにしてあるとget_alloptions関数で自動的に検索する。

get_option($option);

データベースの値を検索して取得する。

$option(string)
必須。値を検索したいオプション名を設定する。
Worpdressのデフォルトで設定されてるオプション名も使用できる。(Option Reference

たとえば次のようなソースをテンプレートファイルに書いたとする▼

$home = get_option('home');
echo $home;

変数$homeにはget_optionで取得したホームURLが代入される。

update_option($option_name, $newvalue);

オプションを更新または作成する。
$description や$autoload が必要なければこちらだけでもよい。

$option_name(string)
必須。更新するオプションの名前。

$newvalue(string)
必須。新しく設定する値。

実際使うときはこんな感じでしょうか▼

if(isset($_POST['new_option_name'])){
update_option('new_option_name',$_POST['new_option_name']);
}
delete_option($name);

オプションを削除する

$name(string)
必須。削除するオプションの名前

更新しました。のメッセージ

<?php if ( !empty($_POST ) ) : ?>
<div id="message" class="updated fade"><p><strong><?php _e('Options saved.') ?></strong></p></div>
<?php endif; ?>