Como adicionar uma tabela Index to Plugin Database

9

Eu criei algumas tabelas adicionais para um plug-in que estou desenvolvendo e preciso adicionar índices a essas tabelas.

Qual é a maneira do WordPress de fazer isso?

O uso de dbDelta() parece não estar funcionando, e não vejo nenhum erro nos logs.

    
por Milk 30.09.2016 / 03:44

2 respostas

4

Você pode executar instruções SQL arbitrárias com wpdb :: query () , incluindo declarações de definição de dados, por exemplo,

function
create_index ()
{
    global $wpdb ;

    $sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;

    $wpdb->query ($sql) ;

    return ;
}

Observação: Como $wpdb->query() pode executar SQL arbitrário , se a instrução passada a ele contiver QUALQUER entrada do usuário, você deverá use wpdb :: prepare () para proteger contra ataques de injeção de SQL.

Mas isso levanta a questão: como você criou suas tabelas específicas de plug-in? "Manualmente" ou programaticamente? Se programaticamente, você não usou $wpdb->query() ? Se você fez "manualmente", você deve criar as tabelas (e seus índices) na ativação do plugin.

Veja a excelente resposta para esta outra questão WPSE para saber como conectar-se à ativação do plug-in (e / ou desativação e desinstalação) para fazer coisas como criar tabelas privadas.

    
por Paul 'Sparrow Hawk' Biron 08.03.2017 / 03:00
3

Usando dbDelta, na parte superior de uma PRIMARY KEY, você pode incluir a palavra KEY para criar um índice para outras colunas:

  

Você deve usar a palavra-chave KEY em vez de seu sinônimo INDEX e incluir pelo menos uma KEY.

Exemplo do schema.php no core:

CREATE TABLE $wpdb->termmeta (
  meta_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default '0',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY term_id (term_id),
  KEY meta_key (meta_key($max_index_length))
) $charset_collate;

Fonte: codex - Criando tabelas com plug-ins

    
por froger.me 13.09.2018 / 01:46