Respostas:
Você pode executar instruções SQL arbitrárias com wpdb :: query () , incluindo instruçõ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 ;
}
Nota: Como $wpdb->query()
pode executar SQL arbitrário , se a instrução que você passar contiver QUALQUER entrada do usuário, use wpdb :: prepare () para se proteger contra ataques de injeção de SQL.
Mas isso levanta a questão: como você criou suas tabelas específicas de plugins? "Manualmente" ou programaticamente? Se programaticamente, você não usou $wpdb->query()
? Se você o fez "manualmente", realmente deve criar as tabelas (e seus índices) após a ativação do plug-in.
Veja a excelente resposta a essa outra pergunta do WPSE sobre como conectar-se à ativação do plug-in (e / ou desativação e desinstalação) para fazer coisas como criar tabelas privadas.
Usando dbDelta, em cima de uma CHAVE PRIMÁRIA, você pode incluir a palavra CHAVE 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 de schema.php no núcleo:
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;