Comprobando si existe una Tabla en la Base de Datos
He leído el codex de WordPress y WordPress profesional. Parece que ambos utilizan algo como
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
para determinar si la tabla existe. ¿Hay alguna razón por la que no se usa CREATE TABLE IF NOT EXISTS ( ... )
? Esto verificará y creará la tabla en 1 consulta, ¿no sería mejor? ¿O me estoy perdiendo algo?

Si usas "IF NOT EXISTS" entonces el script dbdelta no actualizará tu base de datos con los cambios (delta) que aparezcan después de la creación inicial de la base de datos.
(asumiendo que quieres reutilizar el mismo script SQL)
al menos... eso es lo que pienso

Prueba este:
global $wpdb;
$table_name = $wpdb->base_prefix.'custom_prices'; // Prefijo de la tabla de precios personalizados
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table_name ) );
if ( ! $wpdb->get_var( $query ) == $table_name ) {
// continuar
}

DESCARGO DE RESPONSABILIDAD: No soy un gurú de WordPress, solo un DBA de MySQL
Si deseas utilizar una consulta diferente, prueba esta:
SELECT COUNT(1) FROM information_schema.tables WHERE table_schema='dbname' AND table_name='tbname';
Esto devolverá 0 (si la tabla no existe) o 1 (si la tabla existe)

TL;DR (Demasiado Largo; No Leído)
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
global $wpdb;
$tablename = 'miTabla';
$main_sql_create = "CREATE TABLE $tablename";
maybe_create_table( $wpdb->prefix . $tablename, $main_sql_create );
WordPress ahora provee la función maybe_create_table
- ver https://developer.wordpress.org/reference/functions/maybe_create_table/
Antes de llamar a esta función debes incluir manualmente el archivo upgrade.php
, de lo contrario obtendrás un error fatal como el siguiente:
PHP Error fatal: Error no capturado: Llamada a función indefinida maybe_create_table()

Entiendo que esta es una pregunta bastante antigua, pero tal vez alguien la encuentre útil. Pequeña clase que maneja funciones en una nueva base de datos, versión de la tabla y crea si no existe.
class ACCESS_TBDB {
private $wpdb = null;
private $accessTable = 'table_prefix'; // solo el nombre del prefijo de tu tabla
private $accessTableVer = '1.0.7'; // versión de la tabla
private $accessTableOptName = 'access_db_ver'; // nombre para la opción de versión de la base de datos
public function __construct()
{
global $wpdb;
//No me gusta llamar a global $wpdb en cada función de la clase
$this->wpdb = $wpdb;
$tablename = $this->accessTable;
//establecer nuestro prefijo de tabla
$this->wpdb->access_table = $this->wpdb->prefix . $tablename;
// verificar cada vez si la base de datos necesita ser creada o no
$this->checkAccessDatabase();
}
private function createDBSQL(){
// crear SQL para la tabla
$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;
//manejar versiones de la base de datos
$db_version = get_option( $this->accessTableOptName , '0.0.0');
//Sin esto enfrentaremos un error en dbDelta y maybe_create_table
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$dbCreateSql = $this->createDBSQL();
// verificar si tal vez la base de datos necesita actualización
if (version_compare($version, $db_version, '>')) {
// si contiene versiones antiguas/legacy
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/
// solo verificar si la base de datos existe en caso de que haya sido eliminada por alguna razón... :)
$recreate = maybe_create_table( $this->wpdb->access_table, $dbCreateSql );
if(!$recreate){
update_option( $this->accessTableOptName , $version);
}
}
}
... otras funciones ...
}

Utiliza la función get_var
de la clase wpdb
con manejo de excepciones:
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();
}
Referencia: Seleccionar una Variable
