graficajam
Interrogare il Database WordPress con wpdb

Interrogare il Database WordPress con wpdb

Giamp04/01/2026

Ciao! A volte, lavorando su WordPress, capita di dover interrogare direttamente il database - magari su una tabella custom che abbiamo creato per esigenze specifiche del progetto. Come si fa a costruire query SQL in sicurezza sul nostro CMS preferito? Semplice: con la classe $wpdb.

Iniziamo

Per usare $wpdb, è necessario dichiararla come variabile globale all'inizio di qualsiasi funzione personalizzata.

global $wpdb;

Semplicemente richiamiamo $wpdb e siamo pronti ad usare la classe con i suoi "comodi" metodi.

Insert, Update e Delete

La base del CRUD, ecco come utilizzarle.

Insert

global $wpdb;
$wpdb->insert(
    "{$wpdb->prefix}my_table",
    array( 'colonna1' => 'valore', 'colonna2' => 123 ),
    array( '%s', '%d' )
);

$wpdb->prefix ci permette di recuperare il prefisso corretto della tabella. Il primo array contiene le coppie colonna => valore da inserire. Importantissimo è l'ultimo array dedicato a prevenire l'SQL Injection specificando la tipologia di dato che andremo a passare alla nostra query, un po' come PDO di PHP permetteva di fare il binding dei parametri.

Come specificare i dati nell'array:

  • %s (stringa)
  • %d (intero)
  • %f (float)

Update

global $wpdb;
$wpdb->update(
    "{$wpdb->prefix}my_table",
    array( 'colonna1' => 'nuovo_valore' ),
    array( 'ID' => 1 ),
    array( '%s' ), // Formato dei dati
    array( '%d' ) // Formato del WHERE
);

In update il primo array contiene i valori da modificare, il secondo la condizione WHERE per trovare il record. Il terzo array specifica il formato dei dati da salvare (%s, %d, ecc.), il quarto il formato della condizione WHERE.

Delete

global $wpdb;
$wpdb->delete(
    "{$wpdb->prefix}my_table",
    array( 'ID' => 1 ),
    array( '%d' )
);

Prepare

Siamo anche liberi di scrivere la query SQL che vogliamo in totale sicurezza grazie al metodo prepare().

global $wpdb;
$query = $wpdb->query( $wpdb->prepare(
            "UPDATE $wpdb->posts SET post_title = %s, post_content = %s WHERE ID = %d",
            array(
                'Nuovo titolo',
                'Nuovo contenuto',
                10
            )
        ));

Con query() scriviamo ed eseguiamo il nostro SQL "preparandolo" in sicurezza grazie al bind dei valori specificati nell'array.

Altri metodi

La classe $wpdb mette a disposizione altri metodi per lavorare direttamente con il database.

Get Results

Usiamo $wpdb->get_results() per recuperare più righe di dati:

global $wpdb;
$query = $wpdb->prepare(
    "SELECT post_title, post_date 
     FROM $wpdb->posts 
     WHERE post_status = %s 
     AND post_type = %s 
     LIMIT %d", 
    'publish', 'post', 5
);
$risultati = $wpdb->get_results($query);

foreach($risultati as $post){
    // qui i risultati
}

Get Row

$wpdb->get_row() per recuperare una sola riga.

global $wpdb;
$id_utente = 5;
$risultato = $wpdb->get_row( 
    $wpdb->prepare( 
        "SELECT user_email FROM $wpdb->users WHERE ID = %d", 
        array( $id_utente )
    ) 
);
echo $risultato->user_email ?? 'Utente non trovato';

È sempre buona pratica usare prepare() ogni volta che abbiamo un valore da passare.

Get Var

$wpdb->get_var() utile per recuperare un singolo valore (es. il conteggio dei post).

global $wpdb;
$count = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}posts" );
echo $count ?? 0;

E per il debug? possiamo usare $wpdb->show_errors() per mostrare gli errori automaticamente oppure $wpdb->print_error() per stamparli manualmente.

global $wpdb;
// Abilita visualizzazione automatica
$wpdb->show_errors();
$wpdb->query("SELECT * FROM tabella_sbagliata");
// L'errore viene stampato automaticamente
global $wpdb;
$risultato = $wpdb->get_row("SELECT * FROM tabella_sbagliata");

if (!$risultato) {
    // Stampo manualmente
    $wpdb->print_error();
}

Per oggi è tutto grazie per aver letto questo articoletto.

Hai qualcosa da dire?

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

leggi anche...