0

PHP の世界では、HTML フォームでこれらの行に沿って何かを行うことは、完全に正気で正常です。

<input type="text" name="data[name][first]" />
<input type="text" name="data[name][last]" />
<input type="text" name="data[address][street]" />
<input type="text" name="data[address][city]" />

次に、$_POST変数で、次のような配列を取得します。

data = array (
  'name' => array (
    'first' => value,
    'last' => value
  ),
  'address' => array (
    'street' => value,
    'city' => value
  )

次に、var でそれらの名前を使用して、それらにアクセスできます$firstName = $_POST['data']['name']['first'];

私の問題は、これが Wordpress でまったく機能しないことです。私が得るエラーは、trim()関数が配列で使用できないということです。

オブジェクトのparse_query関数にある次のコード部分まで、それが機能する「理由」をたどりました。WP_Query

$qv['p'] =  absint($qv['p']);
        $qv['page_id'] =  absint($qv['page_id']);
        $qv['year'] = absint($qv['year']);
        $qv['monthnum'] = absint($qv['monthnum']);
        $qv['day'] = absint($qv['day']);
        $qv['w'] = absint($qv['w']);
        $qv['m'] = absint($qv['m']);
        $qv['paged'] = absint($qv['paged']);
        $qv['cat'] = preg_replace( '|[^0-9,-]|', '', $qv['cat'] ); // comma separated list of positive or negative integers
        $qv['pagename'] = trim( $qv['pagename'] );
        $qv['name'] = trim( $qv['name'] ); /* Throws trim() error on array! */
        if ( '' !== $qv['hour'] ) $qv['hour'] = absint($qv['hour']);
        if ( '' !== $qv['minute'] ) $qv['minute'] = absint($qv['minute']);
        if ( '' !== $qv['second'] ) $qv['second'] = absint($qv['second']);
        if ( '' !== $qv['menu_order'] ) $qv['menu_order'] = absint($qv['menu_order']);

WordPress 内でフィールドの名前に配列を適切に使用する方法を考えられる人はいますか? WP 以外では一般的な慣行のように思えますが、WP 内では不可能ですか? フォーム名に代わる「ベストプラクティス」があるのではないでしょうか?

4

1 に答える 1

1

フィールドの名前、特に配列の「ベース」を変更したときに解決策が得られました。

私が提供した例では、それはdataであり、いくつかの要素がありました。この場合、dataプラグインで WordPress に登録したカスタム投稿タイプでもありました。何が起こったのか、その理由は正確にはわかりませんが、長い行のどこかで、おそらく名前の競合が原因で、配列がクエリされるはずのものと混同されました。

問題が解決しました!

于 2013-09-15T04:09:21.540 に答える