É uma prática ruim criar a própria tabela para um plugin?

10

Se eu quiser salvar as configurações do meu plugin, é muito fácil e direto.

Agora, gostaria de salvar um pouco mais no banco de dados.

Um nome de arquivo e três outros valores que se aplicam somente a esse arquivo. E existem muitos arquivos com esses valores. É possível salvar o tipo de subarrays usando métodos de banco de dados embutidos? Como posso deletar e ordenar etc?

    
por Badr Hari 01.06.2012 / 12:50

5 respostas

12

Eu raramente discordo de usuários experientes, mas neste caso não posso evitar. Na minha opinião, chamar o uso de tabelas de banco de dados não-núcleo como a prática ruim, por si só, é simplesmente errado.

A escolha de ir com as tabelas principais ou adicionar as suas próprias depende de vários fatores.

O tempo de execução de uma consulta depende do tamanho da tabela. Portanto, se você planeja armazenar quantidades significativas de dados, uma tabela separada que atende apenas a esse tipo específico de conjunto de dados será, inevitavelmente, a solução mais eficiente.

Se você armazenar muitas postagens regulares ou CPTs junto com esses conjuntos de dados específicos, wp_posts e wp_postmeta poderão crescer rapidamente.

Para mim, esta escolha depende em última instância de como os dados são "posty". Deve apoiar um autor, comentários, revisões, trechos ou algo semelhante? Se assim for, eu vou com CPTs e / ou funcionalidade do núcleo. Se não, irei com tabelas separadas para uso de recursos e eficiência.

Se a noção de Eugene estivesse correta, nenhum dos plugins bem escritos acrescentaria suas próprias tabelas, o que felizmente não é o caso.

    
por Johannes Pille 01.06.2012 / 13:30
5

Usar tabelas de base de dados do WP é a melhor prática

  1. O uso de tabelas principais do BD torna seus dados mais portáteis e mais fáceis de fazer backup, já que serão gerenciados pelo exportador / importador principal, bem como pelos inúmeros plug-ins de backup
  2. O uso de tabelas principais do banco de dados torna seus dados mais fáceis e seguros de manipular , pois você terá acesso mais intuitivo às diversas funções principais do WordPress relacionadas à consulta, adição, modificação, exclusão e saneamento de dados do banco de dados, principalmente por meio de a muito poderosa $wpdb class .
  3. O uso de tabelas de BD principais incentiva / facilita as práticas recomendadas para classificação e armazenamento de dados , como armazenar opções de Plugin como uma matriz em uma única linha em wp_options e forçando o desenvolvedor do Plug-in a considerar cuidadosamente o tipo de dados sendo criados / armazenados - é um CPT? é uma taxonomia? é meta meta?
  4. É menos provável que o seu Plugin deixe para trás o ao usar as tabelas principais do BD.

WordPress fornece um meio para Plugins adicionar tabelas ao seu banco de dados

No entanto, para os casos de uso em que uma tabela DB separada é necessária, não deixe de usar o método que o WordPress fornece para adicionar sua tabela personalizada a o banco de dados do WordPress , especialmente para que você possa tirar proveito da poderosa classe $wpdb . Observe as informações / advertências desta lista de entradas do Codex:

  
  • Informações de configuração - opções de usuário inseridas quando o usuário configura o plug-in pela primeira vez e não tendem a crescer muito além disso (por exemplo, em um tag plugin, as escolhas do usuário em relação ao formato da tag cloud na barra lateral). As informações de configuração geralmente serão armazenadas usando o mecanismo de opções do WordPress.

  •   
  • Dados - informações adicionadas à medida que o usuário continua a usar seu plug-in, geralmente informações expandidas relacionadas a postagens, categorias, uploads e outros componentes do WordPress (por exemplo, em um plug-in relacionado a estatísticas, as várias exibições de página, referenciadores e outras estatísticas associadas a cada postagem em seu site). Os dados podem ser armazenados em uma tabela separada do MySQL, que terá que ser criada. Antes de entrar com uma tabela totalmente nova, considere, no entanto, se o armazenamento dos dados do seu plug-in no WordPress 'Post Meta' (a.k.a. Custom Fields) funcionaria. Post Meta é o método preferido; use quando possível / prático.

  •   

Assim, podemos concluir o seguinte:

  1. Armazenar dados (configuração ou gerados pelo usuário) nas principais tabelas do WP é prática recomendada
  2. Existem casos de uso válidos para criar tabelas de banco de dados personalizadas; portanto, a criação de tabelas de banco de dados personalizadas não pode ser considerada como uma prática ruim inerente
  3. Ao criar tabelas DB personalizadas, o WordPress fornece uma implementação de práticas recomendadas
por Chip Bennett 01.06.2012 / 14:12
1

Tabelas de banco de dados não essenciais são obrigatórias se seus dados forem mais complexos do que o modelo de post do WordPress, serão enormes e terão muitos detalhes de meta que serão pesquisados.

O formato EAV que o WordPress usa para o seu post meta não se presta bem à pesquisa multi-critério.

Se você dividir seu meta em várias entradas, você terá várias entradas por postagem na meta-tabela do post, e pesquisar qualquer postagem através de metas será muito mais lento.

Se você armazenar todos os metadados serializados em uma matriz e tê-los como apenas uma entrada no meta-meta, desta vez você será forçado a fazer apenas pesquisas de texto dentro dessa meta e não poderá usar operadores de comparação diretamente em sua meta. consulta sql.

Não é um grande problema se o seu plugin não tiver milhares de entradas e meta associado.

Mas é um grande problema se o seu plugin vai fazer algo grande.

Sua situação, um nome de arquivo como entrada independente e 3 entradas de metadados anexadas a essa entrada não parece tão grande. Você pode usar wordpress post table e meta table para isso.

MAS, se as pessoas pesquisarem muito esses 3 metas, ESPECIALMENTE em conjunto, então eu recomendo que você configure tabelas separadas.

Com esse formato, apenas uma tabela com apenas uma entrada, que também contém todas as metas, seria ok e faria uma consulta rápida.

Por acaso, se você usar tabelas do WordPress e também estiver usando o cache de consultas, o usuário pesquisará se seus dados serão armazenados em cache com o tempo e incorrerão em menos carga. Mas isso não seria tão prudente quanto fazer tabelas separadas.

    
por unity100 22.01.2016 / 00:43
0

Você pode enviar seus arquivos para a biblioteca de mídia. Cada item na biblioteca de mídia é armazenado em wp_posts table. Isso significa que cada arquivo pode ter metadados. Você pode salvar o máximo de informações necessárias para cada arquivo na tabela wp_postmeta usando API de metadados .

  

É uma prática ruim criar a própria tabela para um plug-in?

Sim, é uma prática ruim criar a própria tabela, se você puder usar a funcionalidade principal.

    
por Eugene Manuilov 01.06.2012 / 13:02
0
class TMM {

    public static $options;

    public static function register() {
        self::$options = get_option(TMM_THEME_PREFIX . 'theme_options');
    }

    public static function get_option($option) {
        return @self::$options[$option];
    }

    public static function update_option($option, $data) {
        self::$options[$option] = $data;
        update_option($prefix . 'theme_options', self::$options);
    }

    //ajax
    public static function change_options() {

        $action_type = $_REQUEST['type'];
        $data = array();
        parse_str($_REQUEST['values'], $data);
        $data = self::db_quotes_shield($data);

        if (!empty($data)) {
            foreach ($data as $option => $newvalue) {
                if (is_array($newvalue)) {
                    self::update_option($option, $newvalue);
                } else {
                    $newvalue = stripcslashes($newvalue);
                    $newvalue = str_replace('\"', '"', $newvalue);
                    $newvalue = str_replace("\'", "'", $newvalue);
                    self::update_option($option, $newvalue);
                }
            }
        }
        _e('Options have been updated.', TMM_THEME_FOLDER_NAME);
        exit;
    }

    public static function db_quotes_shield($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                if (is_array($value)) {
                    $data[$key] = self::db_quotes_shield($value);
                } else {
                    $value = stripslashes($value);
                    $value = str_replace('\"', '"', $value);
                    $value = str_replace("\'", "'", $value);
                    $data[$key] = $value;
                }
            }
        }

        return $data;
    }

}
  • O nome da turma é original, renomeie como desejar.
  • Nas funções php add: add_action ('init', array ('TMM', 'register'), 1);
  • E adicione para ajax: add_action ('wp_ajax_change_options', array ('TMM', 'change_options'));
  • Para obter a opção onde você precisa usar isto (por exemplo): $ logo_img = TMM :: get_option ('logo_img');
  • Use para salvar suas opções por métodos nativos do wordpress
por realmag777 07.06.2013 / 17:12