Verificare dacă există o tabelă în baza de date
Am citit documentația WordPress și WordPress Professional. Se pare că ambele folosesc ceva de genul
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
// Verifică dacă tabela există în baza de date
pentru a determina dacă tabela există. Există vreun motiv pentru care nu se folosește CREATE TABLE IF NOT EXISTS ( ... )
? Aceasta va verifica și va crea tabela într-o singură interogare, nu ar fi mai bine? Sau îmi scapă ceva?

DECLARAȚIE DE RESPONSABILITATE : Nu sunt un expert WordPress, doar un MySQL DBA
Dacă doriți să utilizați o altă interogare, încercați aceasta
SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='dbname' AND table_name='tbname';
Va returna fie 0 (dacă tabela nu există) sau 1 (dacă tabela există)

TL;DR
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
global $wpdb;
$tablename = 'myTable';
$main_sql_create = "CREATE TABLE $tablename";
maybe_create_table( $wpdb->prefix . $tablename, $main_sql_create );
WordPress oferă acum funcția maybe_create_table
- vezi https://developer.wordpress.org/reference/functions/maybe_create_table/
Înainte de a apela această funcție, trebuie să incluzi manual fișierul upgrade.php
, altfel vei primi o eroare fatală precum:
PHP Fatal error: Uncaught Error: Call to undefined function maybe_create_table()

Înțeleg că aceasta este o întrebare foarte veche, dar poate cineva o va găsi utilă. O mică clasă care gestionează funcționalitățile pe o nouă bază de date, versiunea tabelei și o creează dacă nu există.
class ACCESS_TBDB {
private $wpdb = null;
private $accessTable = 'table_prefix'; // doar numele prefixului tabelei tale
private $accessTableVer = '1.0.7'; // versiunea tabelei
private $accessTableOptName = 'access_db_ver'; // numele opțiunii pentru versiunea bazei de date
public function __construct()
{
global $wpdb;
//Nu-mi place să apelez global $wpdb în fiecare funcție din clasă
$this->wpdb = $wpdb;
$tablename = $this->accessTable;
//setează prefixul tabelei noastre
$this->wpdb->access_table = $this->wpdb->prefix . $tablename;
// verifică de fiecare dată dacă baza de date trebuie creată sau nu
$this->checkAccessDatabase();
}
private function createDBSQL(){
// creează SQL-ul pentru tabela din baza de date
$charset = $this->wpdb->get_charset_collate();
$sql = "
CREATE TABLE {$this->wpdb->access_table} (
id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
name TINYTEXT,
type VARCHAR(10),
value SMALLINT DEFAULT 0 NOT NULL,
created_at DATETIME DEFAULT NULL,
PRIMARY KEY (id)
) $charset;
";
return $sql;
}
private function checkAccessDatabase(){
$version = $this->accessTableVer;
//gestionează versiunile bazei de date
$db_version = get_option( $this->accessTableOptName , '0.0.0');
//Fără aceasta vom întâmpina eroare la dbDelta și maybe_create_table
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$dbCreateSql = $this->createDBSQL();
// verifică dacă baza de date are nevoie de actualizare
if (version_compare($version, $db_version, '>')) {
// dacă conține versiuni vechi/dezvoltare
if (version_compare($db_version, '1.0.0', '<')) {
$this->wpdb->query("DROP TABLE IF EXISTS {$this->wpdb->access_table};");
}
dbDelta($dbCreateSql);
update_option( $this->accessTableOptName , $version);
}else{
//https://developer.wordpress.org/reference/functions/maybe_create_table/
// verifică doar dacă baza de date există în caz că a fost ștearsă din diverse motive ... :)
$recreate = maybe_create_table( $this->wpdb->access_table, $dbCreateSql );
if(!$recreate){
update_option( $this->accessTableOptName , $version);
}
}
}
... alte funcții ...
}

Folosește funcția get_var
din clasa wpdb
cu gestionarea excepțiilor:
try {
$wpdb->hide_errors();
$wpdb->get_var( 'SELECT COUNT(*) FROM ' . $wpdb->prefix . 'translator' );
$wpdb->show_errors();
} catch (Exception $e) {
error_log($e);
} finally {
translator_create_db();
}
Referință: SELECT a Variable
