web-dev-qa-db-ja.com

設定API - オプションの配列を1つの設定として保存する(array_push?)

1.基本設定APIコールバック。

設定APIの使用 my $ sanitize_callback 検証関数は次のようになります。

    (...)
    if($type == "foo") {
       $valid_input[$id] = $option[$id];
    }  

    else if($type == "bar") {
       $valid_input[$id] = wp_filter_nohtml_kses($input[$id]);
    } 
    (...)

Chip Bennettによるこの素晴らしいテーマとほぼ同じです。 https://github.com/chipbennett/oenology/blob/master/functions/options-register.php#L95

2.オプションの更新を避けます。

フォーム送信後、すべてのオプションが更新され、その値が$ inputで上書きされます。

それらのうちの1つを更新したくない場合($typemultiple_settingsであるとしましょう)、代わりに配列を作成し、それに新しいオプションを追加するとどうなりますか?それ、どうやったら出来るの?

私は次のようなことを試していました:

    else if($type == "multiple_settings") {
       $valid_input[$id][] = $input[$id]; // creates an array but still overwrites
       $valid_input[$id] = array_Push($valid_input[$id], $input[$id]); //returns NULL
     } 

運なしで。

[編集]

たぶんそれは私が私の設定を保存する方法(下記の検証機能のリターン)と関係があるのでしょうか?

    $options = get_option('XX_theme_settings'); 
    $valid = array_merge($options,$valid_input);
    return $valid; 

ありがとうございます。

4
Wordpressor

常にWP_DEBUGTRUEに設定して開発してください。あなたはタイプミスがあります:

array_Push($valid_input[$id], $input[$id];

)の後にarray_Pushがありません)


配列ではない配列にプッシュすることはできません。

// So, check this before pushing: 
$valid_input[$id] = ! is_array( $valid_input[$id] ) ? (array) $valid_input[$id] : $valid_input[$id];
1
kaiser