Cum să inserezi corect date într-o tabelă personalizată prin intermediul unui plugin
Am un plugin care citește date dintr-un fișier încărcat și execută interogări în baza de date WordPress. Aceste inserări sunt într-o tabelă creată de plugin-ul meu, deci nu sunt de tipul post.
Așa am reușit să îl fac să funcționeze:
$connection = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
mysqli_query($connection, $query);
Problema cu această abordare este că trebuie să declar aceste variabile ($db_host, $db_user, $db_pass, $db_name) în codul sursă al plugin-ului.
Există vreo modalitate prin care pot insera date în tabelele mele personalizate folosind API-ul WordPress? Sau există vreo modalitate prin care pot prelua aceste variabile dintr-un fișier extern pe care să-l pot ignora într-o configurație de control al versiunilor?

Aceasta nu este o practică bună să încerci să te conectezi la baza de date prin metode proprii în timp ce WordPress o face pentru tine inițial.
Problema cu această abordare este că trebuie să declar aceste variabile ($db_host, $db_user, $db_pass, $db_name) în codul sursă al plugin-ului.
Toate aceste proprietăți sunt definite în fișierul wp-config.php
, situat în directorul rădăcină.
Dacă dorești să obții aceste constante, poți include fișierul și să apelezi constantele, sau să folosești REGEX (mai bine REGEX, deoarece pot exista alte callback-uri care necesită încărcarea WordPress)
// încărcare fișier config pentru a obține constantele DB_*
$dirname = dirname(__FILE__);
$root = false !== mb_strpos( $dirname, 'wp-content' ) ? mb_substr( $dirname, 0, mb_strpos( $dirname, 'wp-content' ) ) : $dirname;
// dacă $root nu este corect, furnizează o cale statică, $root = '/calea/catre/directorul/radacina'
// presupunând că constantele sunt gata (wp este configurat), să le obținem
require_once( $root . "wp-config.php" );
echo var_dump(
'Nume DB', DB_NAME,
'Utilizator DB', DB_USER,
'Parolă DB', DB_PASSWORD,
'Gazdă DB', DB_HOST
);
Iată o soluție mai bună:
Încarcă WordPress
require( '/wp-blog-header.php' );
Ar trebui să furnizezi o cale funcțională către acest fișier!
Pentru a testa dacă ai încărcat WordPress cu succes, afișează ceva:
add_action("wp", function() {
echo sprintf( "Da! Lucrez cu WordPress v. %s!\n", get_bloginfo("version") );
exit("Am terminat\n");
});
Acum folosește WordPress DB API
Pentru a insera date, există wpdb::insert
pe care ar trebui să-l folosești. Iată sintaxa:
$wpdb->insert( $table, $data, $format );
și un exemplu de utilizare:
$wpdb->insert(
'messages',
array(
'PM_ID' => (int) $pm_id,
'sender' => $current_user->ID,
'recipient' => (int) $recipient,
'message' => "Salut!\n",
'date' => time()
)
);
$record_id = $wpdb->insert_id;
În exemplu, array-ul din al doilea parametru al $wpdb->insert
este un array cu indexi ca nume de coloane, și valori care vor fi inserate pentru aceste coloane într-un înregistrare independentă al cărei ID îl poți obține cu $wpdb->insert_id
, care returnează ultimul ID inserat în acea tabelă.
Sper că acest lucru te ajută, cel puțin să eviți SQL injection folosind $wpdb::insert
sau declarații pregătite în loc de interogări directe.

De ce să nu studiezi cum funcționează $wpdb. Vizitează https://codex.wordpress.org/Class_Reference/wpdb
Iată un exemplu de cum să inserezi date în baza de date folosind $wpdb
<?php
global $wpdb;
$wpdb->insert(
'numele_tabelului_aici',
array(
'coloana1' => 'valoare1',
'coloana2' => 123
),
array(
'%s',
'%d'
)
);
?>
Vizitează https://codex.wordpress.org/Creating_Tables_with_Plugins pentru mai multe informații.
