Risposte:
È possibile eseguire istruzioni SQL arbitrarie con wpdb :: query () , incluse le dichiarazioni di definizione dei dati, ad es
function
create_index ()
{
global $wpdb ;
$sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;
$wpdb->query ($sql) ;
return ;
}
Nota: poiché è $wpdb->query()
possibile eseguire SQL arbitrario , se l'istruzione che viene passata contiene QUALSIASI input dell'utente, è necessario utilizzare wpdb :: prepar () per proteggere dagli attacchi SQL Injection.
Ma questo solleva la domanda: come hai creato le tue tabelle specifiche per i plugin? "Manualmente" o programmaticamente? Se programmaticamente, non hai usato $wpdb->query()
? Se lo hai fatto "manualmente", allora dovresti davvero creare le tabelle (e i loro indici) dopo l'attivazione del plugin.
Vedi l'eccellente risposta a questa altra domanda WPSE su come agganciare l'attivazione del plugin (e / o disattivazione e disinstallazione) per fare cose come creare tabelle private.
Usando dbDelta, sopra un PRIMARY KEY, puoi includere la parola KEY per creare un indice per altre colonne:
Devi usare la parola chiave KEY anziché il suo sinonimo INDICE e devi includere almeno un KEY.
Esempio da schema.php nel 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;