web-dev-qa-db-ja.com

メタフィールドを複数回格納する OR 多次元配列で一度?

私はリピータータイプフィールドを使って拡張するいくつかのオプションを得ました。各フィールドに保存する値はすでに配列なので、本質的にはオプションごとに多次元配列を保存します。 (この週間取引時間ピッカーを参照してください http://foxinni.com/screens/trading_hours-20120828-162304.png

私の質問はこれです:1つのメタフィールドに2つの直列化された値としてメタ値を格納するのが良いのでしょうか。データベース内の同じ名前のカスタムフィールド?

1つのカスタムフィールドを管理するほうが簡単なので、私が求める理由は、メタフィールドIDが重複していることが管理上の手間がかかることです。正しい値を確認するために古い値をチェックするのは面倒です。

4
Foxinni

私はpre_get_postクエリフィルタリングの割り当てをしてきたので、メタ値はデータベース内の複数のフィールドに保存したままにします。そこに含まれている機能の中には、投稿メタデータの検索/フィルタリングのためのものがあり、値を二重に直列化された値に保存しようとすると、非常に困難になります。近い将来に、単一の、より単純な値だけを保存するのであれば、保持する良い習慣です。

私が抱えていた問題のいくつかを片付けるために...私は保存時にupdate_post_meta()を使うことを選びを選び、最初にすべての値を削除してから直接追加します。古い値を新しい値でチェックしてそれを実行するのは複雑すぎます。おそらくベストプラクティスではありません。

if(isset($_POST[$field['id']])) {
    $new = $_POST[$field['id']];
}

//Store repeater fields as one dimentional array with same key meta fields
if(is_array($new) && isset($new[0])){

    //DELETE EVERYTHING FIRST
    delete_post_meta($post_id, $field['id']);   

    foreach ($new as $key => $value) {
        add_post_meta($post_id, $field['id'], $value);  
    }

}
2
Foxinni