web-dev-qa-db-fra.com

Stocker les méta-champs plusieurs fois OR une fois avec tableau multidimensionnel?

J'ai quelques options que je développe en utilisant un champ de type répéteur. Les valeurs que j’enregistre pour chaque champ sont déjà des tableaux, c’est pourquoi j’enregistre un tableau multidimensionnel par option. (Voir ce sélecteur d'heures de négociation hebdomadaire http://foxinni.com/screens/trading_hours-20120828-162304.png )

Ma question est la suivante : vaut-il mieux stocker les méta-valeurs dans un seul méta-champ en tant que valeur sérialisée double, ou vaut-il mieux les scinder en une seule valeur mais en tant que multiple? champs personnalisés avec le même nom dans la base de données?

La raison pour laquelle je pose cette question est parce qu'il est plus facile de gérer un seul champ personnalisé et, comme je viens de le constater, la duplication d'un ID de méta-champ est un peu difficile à gérer. Vérifier l'ancienne valeur pour vérifier que le champ correct est fastidieux est imo ..

4
Foxinni

J'ai pensé laisser les méta-valeurs économiser sur plusieurs champs de la base de données, car je faisais beaucoup de filtrage de requêtes pre_get_post. Certaines des fonctionnalités proposées permettent de rechercher/filtrer des méta-données postérieures. Cela rendrait-il les choses très difficiles si je devais commencer à enregistrer des valeurs dans des valeurs doublement sérialisées. Une bonne habitude à conserver si je ne devais sauvegarder que des valeurs uniques, plus simples, dans un avenir proche.

Pour éclaircir certains problèmes que j’avais ... j’ai décidé PAS d’utiliser update_post_meta() lors de la sauvegarde et de supprimer simplement toutes les valeurs, puis puis en les ajoutant directement après. Vérifier l’ancienne valeur avec la nouvelle, puis agir, devenait trop complexe. Probablement pas la meilleure pratique.

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