web-dev-qa-db-ja.com

コールバックをパラメータ化するAdd_settings_field()?

私は、非常によく似たタイプのさまざまなオプションを使用して、かなり大きくて広範な設定ページを作成しようとしています。

約20の異なるフィールドがあり、それらのほとんどの間の違いは単にそれらのIDであるので、私はそれぞれのために別々のコールバックを作成することを避けたいです。

これらの各フィールドの設定IDの変数でコールバックをすることは可能ですか?そうすることで、1つのコールバックで同じタイプのさまざまな設定フィールドを処理できます。

私はadd_setitngs_feild()に$ argsパラメータを使用してみましたが、残念ながらそれは機能しません。例えば:

add_settings_field('name', 'Field Name', array($this, 'fieldCallback'), 'SettingsGrouP', 'SettingsSection', array("settingID!")); 


function fieldCallback($id)
{
    echo "<input id='" . $id . "'/>";//etc, etc
}

fieldCallback siが呼び出されていますが、入力のIDが空白です。

add_settings_fields() に渡すことができる最後のオプションの$args引数はコールバックに渡されます。だから、あなたはちょうど同じコールバックを使用することができるようです。

2分前にチャットで話し合ったことが原因でこの機会に遭遇したので、私は正しいと思います。 :)

PSはコードを調べましたが、2.9引数が渡されないうちに、比較的最近のものです。

2
Rarst

Wordpressがここでコールバック関数に引数を渡す方法は少しトリッキーです。コールバック関数はパラメータとして$args配列全体を受け取るので、次のように関数を変更することができます。

function fieldCallback(array $args)
{
    echo "<input id='" . $args[0] . "'/>";//etc, etc
}

add_settings_fieldをそのままにします。

0
Jacer Omri

add_settings_field()関数の最後の(オプションの)引数$argsでは、ドキュメントに書かれているようにarray('label_for' => 'something')を使うことができます( http://codex.wordpress.org/Function_Reference/add_settings_field を参照)。

あなたのフィールドのIDを渡したいのであればそれのために 'label_for'を使用してください:)

0
kaciak