1. ホーム
  2. WordPress

【WordPress】checked・selected・disabled の使い方|フォームの状態を安全に出力する

Share

設定画面やメタボックスでフォームを作るとき、「保存済みの値に合わせてチェックを入れておく」「選択肢を選択状態にしておく」といった処理が必要になります。これを if 文で毎回書くと、コードが読みにくくなりがちです。WordPress には、この定番処理を1行で書ける checked()selected()disabled() というヘルパー関数が用意されています。この記事では、3つの関数の使い方と共通の仕組み、設定画面での実践例までを解説します。

checked・selected・disabled とは

この3つは、2つの値を比べて、一致していれば対応するHTML属性を出力するヘルパー関数です。何を出力するかがそれぞれ異なります。

関数一致したときに出力する属性主な用途
checked()checked="checked"チェックボックス・ラジオボタン
selected()selected="selected"selectoption
disabled()disabled="disabled"入力欄・ボタンの無効化

いずれも既定では属性をその場に出力(echo)するので、フォーム部品のタグの中に <?php ... ?> として差し込むだけで使えます。

checked() でチェック状態を反映する

もっともよく使うのが checked() です。保存済みの値と、そのチェックボックスの値が一致していれば checked 属性を出力します。次の例では、保存された設定が '1' のときにチェックが入った状態で表示されます。

form.php
<?php $notify = get_option('my_notify'); // 保存済みの値(例: '1') ?>

<label>
  <input type="checkbox" name="my_notify" value="1"
    <?php checked($notify, '1'); ?>>
  お知らせを受け取る
</label>

$notify'1' なら checked($notify, '1') checked="checked" を出力し、チェック済みで表示されます。値が違えば何も出力されず、チェックは外れたままになります。

selected() で選択状態を反映する

プルダウン(select)では、各 option の中で selected() を使い、保存値と一致する選択肢を選択状態にします。

form.php
<?php $plan = get_option('my_plan'); // 例: 'pro' ?>

<select name="my_plan">
  <option value="free" <?php selected($plan, 'free'); ?>>無料</option>
  <option value="pro"  <?php selected($plan, 'pro'); ?>>プロ</option>
</select>

この例では $plan'pro' なので、「プロ」の optionselected が付いて選択された状態で表示されます。

disabled() で操作を無効にする

disabled() は、条件に応じて入力欄やボタンを無効化したいときに使います。たとえば権限のないユーザーには保存ボタンを押させたくない、という場合に便利です。

form.php
<?php
// 権限がない(false)ときに disabled を出力する
$can_edit = current_user_can('manage_options');
?>

<input type="submit" value="保存"
  <?php disabled($can_edit, false); ?>>

disabled($can_edit, false) は「$can_editfalse と一致するとき」、つまり権限がないときに disabled を出力します。権限があれば何も出力されず、ボタンは通常どおり押せます。

3つに共通する引数の仕組み

3つの関数は引数の並びが共通で、次の3つを受け取ります。

引数説明
第1引数比較したい値(保存値など)
第2引数比較の基準になる値。省略すると true
第3引数true なら出力、false なら文字列を返す。省略時は true

比較は「等しいか」をゆるやかな比較(==)で判定します。第2引数を省略すると true との比較になるため、値が '1'1 のようなチェックボックスでは checked($notify) のように第1引数だけでも書けます。

第3引数を false にすると、出力せずに属性の文字列を返すので、変数に受け取って組み立てることもできます。

form.php
<?php
// 第3引数 false で、出力せず文字列として受け取る
$attr = checked($notify, '1', false); // ' checked="checked"' など
echo "<input type='checkbox'{$attr}>";

if 文で書くより読みやすく安全

同じことは if 文でも書けますが、フォーム部品ごとに条件分岐を挟むとコードが長くなり、属性の書き忘れやスペースの過不足といったミスも起きやすくなります。これらのヘルパーは属性を 属性名="属性名" の形で正しく組み立ててくれるため、短く書けるうえにミスも減らせます。WordPress のコア自身も管理画面のフォームでこれらを使っており、テーマやプラグインでフォームを作るときの定番として覚えておくとよいでしょう。

なお、読み取り専用にする readonly 属性用のヘルパーもあります。かつては readonly() という名前でしたが、PHP 8.1 の readonly キーワードと衝突するため、WordPress 5.9 以降は wp_readonly() を使います。使い方は他の3つとまったく同じです。

まとめ

checked()selected()disabled() は、2つの値を比べて一致していれば対応するHTML属性を出力する、フォーム用のヘルパー関数です。第1引数に保存値、第2引数に基準値を渡し、既定ではその場に属性を出力します。第2引数を省略すると true との比較になり、第3引数を false にすると文字列として受け取れます。if 文を書くより短く安全にフォームの状態を反映できるので、設定画面やメタボックスを作るときにぜひ活用してみてください。

参考ページ