この質問は、コードの書き方よりも、「スケール」の観点から実装したいプロセス/ロジックに関係しています。
WordPress には、HTML として読み込まれるフォームがいくつかあり、ユーザーがカスタム投稿 (実際には、CMS に慣れていない人のための新しいデータベース エントリ) を作成すると、新しい「イベント」が記録されます。これはデータベースエントリ/ポストの名前と値を設定するために update_post_meta()
を使用しているため、すべてを手動でマッピングしたくありません。そのため、フォームが送信されるときに PHP ループ foreach を使用します。 ($_POST as $ name => $value) {
このイベントのすべてのデータベース テーブルを設定します。
これは正常に機能しますが、ユーザーがフォームを保存し、後で編集するために戻ってきた場合、値が存在する場合は次のようにエコー バックするようにします。
リーリー繰り返しますが、このアプローチはうまく機能しますが、このページには約 500 個のフィールドがあるため、各フィールドに一意の変数 (この場合は $reported_by
) を手動で設定すると、かなりの費用がかかります。基本的にコードベースが 50% 近く増加するため、メンテナンスが困難で非効率的になります。
この問題を解決する方法について何かアイデアはありますか?当然のことながら、php を介してフォームを構築し、それを HTML でエコーすることはできますが、これも非常に手動のプロセスのように感じられます。 PHPはサーバーサイドなので、AJAXを使用しない限り、クライアントサイドでタグ/入力の名前の値を簡単に取得することはできませんが、それもかなり手動になるような気がします。
したがって、変数名を手動で設定することなく、このプロセスを 500 フィールドすべてに簡単に拡張できる方法がない限り、何があっても、多くの重複した作業に直面することになります。
お時間をいただきありがとうございます!
最初に注意すべきことは、フォーム入力ごとに異なる名前のローカル変数を実際に作成する必要はないということです。つまり、次のように記述する必要はありません:
リーリー次のように書くことができます:
リーリーこれが役立つのはなぜですか? この 入力項目に関連するコンテンツは 2 つだけであるため:
これらはどちらも単なる文字列なので、PHP 変数に簡単に抽出できます。 リーリー
これらはparameters によく似ているので、$incident_id
これで、500 個の入力項目を表示するには、も渡すことを忘れずに、これを関数に変換しましょう:
リーリーdisplay_input
関数を 500 回呼び出すだけで済みます。これを回避するには、配列と
foreachループを使用します。 リーリー
その後、配列をハードコーディングする代わりに、構成ファイルまたはデータベース テーブルから配列を取得できます。繰り返しの部分 (HTML レンダリングの詳細) を自動化し、表示するフィールドのリストを定義するという「楽しい」部分だけを残しました。一部のフィールドを少し変更する必要がある場合は、関数 (および構成配列) に追加のオプションを追加できますが、あまり多くの変更がない限り、コードは非常にシンプルかつ単純なままになるはずです。