web-dev-qa-db-ja.com

プラグインの複数オプションページ検証

私はプラグインを書いています、そして私は(明確さのために)プラグインの異なるオプションのために複数のページを持つことにしました。単一のオプションを実行するのは簡単なことではありませんでしたが、複数のページがあると問題が発生します。

私のオプションはすべて以下のように登録された配列に入っています。

register_setting( 'plugin_options', 'options', 'validator' );

私が言ったように、1ページだけを持つことは簡単でした。フォームを作成し、フォームとブームを送信し、オプションを保存します。私は複数のページを持っているので、私が触れたくない他の値があるかもしれないという事実にもかかわらず、Wordpressはオプション配列を完全に置き換えているようです。いくつかの方法を試してみたところ、最後に OttoのWebサイト でこの解決策を見つけることができました。

function plugin_options_validate($input) {
    $options = get_option('plugin_options');
    $options['text_string'] = trim($input['text_string']);
    if(!preg_match('/^[a-z0-9]{32}$/i', $options['text_string'])) {
        $options['text_string'] = '';
    }
    return $options;
}

どちらかといえばうまくいかないようですが、その理由はよくわかりません。

私の実際の解決策は次のとおりです。

  1. 実際のオプションを取得します。
  2. Optionsとinput配列で同じキーが見つかった場合は、foreach配列を実行して値を変更します。
  3. 値を返してください。

しかし、私は壁にぶつかっています。私はチェックボックスで設定される多くのオプションを持っています、そして私がそれらのチェックを外すとき、formはチェックボックスの名前を提出しません、従って、私は正しく私の配列を通り抜けることができません。

私は何を求めているのかと思いますが...どんな種類のオプション(入力、チェックボックスなど)を取り、 not destroyしないregister_settingsへのコールバックを行うにはどうすればいいですか。その時点で保存しているオプションに影響されない、すでに配列に保存されている値。

これで何か手助け?ありがとうございます。

わかりました、しばらく検索した後、私の問題に対する「簡単な」解決策は(外観メニューのように)タブとオプションセクションを作成することから始めることになるでしょう。私はまだその問題に専門家ではありませんが、私はこの問題に関連するほとんどすべてを説明しているこの 3部ガイド に従いました。彼はテーマを念頭に置いてガイドを書いているので、私はただプラグインに適応する必要がありました!

読んで時間をかけた人に感謝します!