Armazenar meta campos várias vezes OU uma vez com matriz multidimensional?

4

Eu tenho algumas opções que eu expanda usando um campo tipo repetidor. Os valores que eu salvo para cada campo já são um array, então, na essência, estou salvando um array multi-dimensional por opção. (Veja este selecionador de horas semanais de negociação enlace )

Minha pergunta é esta: : É melhor armazenar os valores meta em um meta campo como um valor serializado duplo ou é melhor dividi-los em um valor dimensional, mas armazenando como vários campos personalizados com o mesmo nome no banco de dados?

O motivo que eu pergunto é porque é mais fácil gerenciar apenas um campo personalizado, e como eu descobri, ter ID de campo de metadados duplicado é um pouco difícil de gerenciar. Verificar o valor antigo para verificar o campo correto é uma imposição difícil.

    
por Foxinni 28.08.2012 / 16:27

1 resposta

2

Eu imaginei que deixaria os valores meta salvando em vários campos no banco de dados, porque eu fiz alocação de pre_get_post de filtragem de consulta. Alguns dos recursos lá são para pesquisar / filtrar metadados pós-dados e começaria a tornar as coisas muito difíceis se eu fosse começar a salvar valores em valores duplamente serializados. Um bom hábito para manter se eu fosse salvar apenas valores simples e mais simples no futuro próximo.

Para esclarecer alguns dos problemas que eu tive ... optei NÃO para usar update_post_meta() ao salvar e simplesmente excluir todos os valores primeiro e depois adicioná-los logo em seguida. Verificar o valor antigo com o novo e, em seguida, agir sobre ele estava ficando muito complexo. Provavelmente não é a melhor prática.

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);  
    }

}
    
por Foxinni 28.08.2012 / 17:27