0

そこにあるプリレンダーフィルターの1つを使用して、ワードプレスの重力フォームにデータを入力しています。

私は通常、彼らのドキュメントに従い、毎回機能する foreach ループを使用して $items[] を動的に入力します。

しかし、今回は $items[] 配列の php foreach ループを動的に作成するのではなく、各値を手動で配列に入力しています。

下記を参照してください...

add_filter("gform_pre_render", "populate_dropdown_bike_make");
add_filter("gform_admin_pre_render", "populate_dropdown_bike_make");
function populate_dropdown_bike_make($form){
    if($form["id"] != 4)
        return $form;

    $items = array();
    $items[] = array(
        "text" => "", "value" => null,
        "text" => "YAMASAKI", "value" => "YAMASAKI",
        "text" => "YAMOTO", "value" => "YAMOTO",
        "text" => "YEZDI", "value" => "YEZDI",
        "text" => "YIBEN", "value" => "YIBEN",
        "text" => "YIYING", "value" => "YIYING",
        "text" => "YONGKANG", "value" => "YONGKANG",
        "text" => "YONGWANG", "value" => "YONGWANG",
        "text" => "ZEBRETTA", "value" => "ZEBRETTA",
        "text" => "ZENNCO", "value" => "ZENNCO",
        "text" => "ZEPII", "value" => "ZEPII",
        "text" => "ZERO-MOTORCYCLES", "value" => "ZERO-MOTORCYCLES",
        "text" => "ZEV", "value" => "ZEV",
        "text" => "ZHEJIANG", "value" => "ZHEJIANG",
        "text" => "ZHENHUA", "value" => "ZHENHUA",
        "text" => "ZHIXI", "value" => "ZHIXI",
        "text" => "ZHONGYU", "value" => "ZHONGYU",
        "text" => "ZING", "value" => "ZING",
        "text" => "ZIPPI", "value" => "ZIPPI",
        "text" => "ZIPSTAR", "value" => "ZIPSTAR",
        "text" => "ZONGSHEN", "value" => "ZONGSHEN",
        "text" => "ZONTES", "value" => "ZONTES",
        "text" => "ZUNDAPP", "value" => "ZUNDAPP"   
    );

    foreach($form["fields"] as &$field)
        if($field["id"] == 45){           
            $field["choices"] = $items;
        }

    return $form;

}


これに関する問題は、ドロップダウンの最後のオプションZUNDAPPのみを返すことです。

なぜこれが起こっているのか誰にもわかりますか?

ありがとう

4

4 に答える 4

4

同じキーを何度も再定義しています。

$items[] = array(
    "text" => "", "value" => null,
    "text" => "YAMASAKI", "value" => "YAMASAKI"
)

与えます:

array(array(
    "text" => "YAMASAKI",
    "value" => "YAMASAKI"
));

あなたが意図していると思います:

//    v-- no [] here
$items = array(
    array("text" => "", "value" => null),
    array("text" => "YAMASAKI", "value" => "YAMASAKI"),
    // etc.
于 2013-09-25T15:59:39.243 に答える
2

問題は、構築された配列構造に依存していると思います。

要素 (配列) を 1 つだけ追加します。配列自体では、以前のすべてのキーを再定義して上書きします。

次の構文を使用します。

$items[] = array("text" => "", "value" => null);
$items[] = array("text" => "YAMASAKI", "value" => "YAMASAKI");

配列を直接割り当てることもできます。

$items = array(
    array("text" => "", "value" => null),
    array("text" => "YAMASAKI", "value" => "YAMASAKI"),
    // ...  
);
于 2013-09-25T16:00:17.717 に答える
0

に何かを挿入するたびに上書きtextしています。value$items

次のような値を挿入する必要があるでしょう。

$items = array( 'key' => 'value', .... )

または、ドキュメントに従って、個々のエントリを配列にラップします。

$items = array (
            array ('value' => value1, 'key' => key1 ),
            array ('value' => value2, 'key' => key2 ),
            ....
         );
于 2013-09-25T16:01:03.060 に答える
0
$items[] = array(
      ^^

問題があります。これにより、配列が多次元配列に変わります。あなたのコードは、それがまだ 1 次元配列であると想定しており、それが最後の要素のみを出力する理由です。

次のように変更します。

$items = array(

例えば:

$arr = array();
$arr[] = array('foo' => 'bar');
print_r($arr);

ロジックによると、出力は次のようになります。

Array
(
    [foo] => bar
)

しかし、実際には次のとおりです。

Array
(
    [0] => Array
        (
            [foo] => bar
        )

)
于 2013-09-25T16:01:17.377 に答える