4

WordPress プラグインの設定ページを作成しました。

次に、同じページに 2 つの設定セクションを作成しました。

add_plugins_page(
    __('API Settings', 'api'),
    __('API Settings', 'api'),
    'administrator',
    'api',
    array('API', 'settings_display')
);

// add general settings section
add_settings_section(
    'api_general',
    __('General Settings', 'api'),
    array('API', 'section_callback'),
    'api'
);

// add page section
add_settings_section(
    'api_pages',
    __('Set API pages', 'api'),
    array('API', 'section_callback'),
    'apis'
);

その後、add_settings_field() を使用して、さまざまなフィールドがさまざまなセクションに追加されました。

ページのレンダリングを処理する関数は次のようになります。

<!-- Create a header in the default WordPress 'wrap' container -->
<div class="wrap">
    <!-- Add the icon to the page -->
    <?php screen_icon(); ?>
    <h2><?php _e('API Settings', 'api'); ?></h2>
    <!-- Make a call to the WordPress function for rendering errors when settings are saved. -->
    <?php settings_errors(); ?>
    <!-- Create the form that will be used to render our options -->
    <form method="post" action="options.php">
        <?php settings_fields('api_pages'); ?>
        <?php settings_fields('api_general'); ?>
        <?php do_settings_sections('api'); ?>
        <?php submit_button(); ?>
    </form>
</div><!-- /.wrap -->

次に、ページ設定を保存しようとすると、api_general 設定のみが保存されます。

settings_fields() は実際には、特定のセクションの nonce、action、および option_page フィールドのみを出力するためのものであることがわかりました。したがって、2 つの異なるセクションに対して呼び出した場合、1 つのセクション出力は基本的に前のセクションを無視します。

いくつかの調査を行い、チュートリアルを見てきましたが、同時に複数のセクションを保存する必要があることを示すものは見つかりませんでした。しかし、do_settings_sections() はページのすべてのセクションを出力するため、すべてのセクションを同時に保存する方法が必要です。

私の唯一の他の手段は、すべてのフィールドを同じセクションに結合するか、可能であれば避けたい別のページを作成することです.

4

3 に答える 3

2

たぶんこれが役立つでしょう....このコーデックスによると:settings_fields

settings_fields 関数の最初のパラメーターは、register_setting で宣言されている設定グループであると想定されています。

しかし、設定セクションの名前を使用しているように見えるので、それがどのように機能するのかさえわかりません。

1 つのページに 2 つ以上のセクションを含めることができますが、すべての設定 (オプションなど) は、それらがどのセクションにあるかに関係なく、フォーム内の同じ設定グループの一部である必要があります。グループ (単数形) の非表示フィールドは、魔法の「settings_field」関数によってフォームの上部に挿入されます。

ただし、ページに複数のフォームを配置し、それぞれに独自の送信ボタンと settings_fields('optiongroup') を設定することもできますが、個人的には、ページに複数の送信ボタンがあるとユーザーが非常に混乱すると思います。

私が理解しているように、制限要因は、以下の間に 1 対 1 対 1 の対応があることです。

  • ページ上のフォーム
  • そのフォームの送信ボタン
  • そのフォームの settings_fields

settings_fields() は、舞台裏で保存されるものを決定します。また、個々のオプションよりもオプションの配列を使用する方が効率的です。これはまだ試していませんが、フォームのセクションを論理的に分割するには、各設定セクションに関連付けられたオプションの配列を 1 つ持つことが理にかなっています。次に、各セクション (n) は、すべてのフィールドの値の配列を取得するための独自の get_options('section-(n)') を持ちます。ただし、(繰り返しすぎるリスクがありますが) 各セクションのすべてのフィールド値を含む各オプション配列は、各ページの 1 つのフォームに対して 1 つの送信ボタンが押されると、一度に保存されます。

うわー!:-)

于 2013-03-29T12:05:42.730 に答える