WordPress 4.8.1 usa mysql_connect que no funciona con PHP 7
Acabo de actualizar a PHP 7 solo para descubrir que WordPress 4.8.1 (última versión) todavía usa mysql_connect en el módulo wp-db.php, pero mysql_connect ha quedado obsoleto.
El siguiente código está tomado de wp-db-php, líneas 1567-1571:
if ( WP_DEBUG ) {
$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
} else {
$this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword,
$new_link, $client_flags);
}
Aquí está la salida cuando intento ejecutar mi programa:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php:1570
Stack trace:
#0 D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php(658): wpdb->db_connect()
#1 D:\ApacheHtdocs\ConneXions\wp-includes\load.php(404): wpdb->__construct('root', '', 'connexions', 'localhost')
#2 D:\ApacheHtdocs\ConneXions\wp-settings.php(106): require_wp_db()
#3 D:\ApacheHtdocs\ConneXions\wp-config.php(104): require_once('D:\ApacheHtdocs...')
#4 D:\ApacheHtdocs\ConneXions\wp-load.php(37): require_once('D:\ApacheHtdocs...')
#5 D:\ApacheHtdocs\ConneXions\wp-blog-header.php(13): require_once('D:\ApacheHtdocs...')
#6 D:\ApacheHtdocs\ConneXions\index.php(17): require('D:\ApacheHtdocs...')
#7 {main} thrown in D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php on line 1570
No puedo creer que WordPress diga que recomienda PHP 7, pero no funciona con él. ¿Qué me estoy perdiendo aquí?

Parece que no tienes mysqli instalado y/o habilitado en tu servidor. Si no recuerdo mal, mysqli
se añadió a PHP en la versión 5.5, y la antigua extensión mysql
quedó obsoleta y fue retirada por completo desde entonces. Si has actualizado desde una versión muy antigua de PHP, puede que aún necesites el paso adicional de habilitar mysqli
.
(WordPress comprueba la existencia de mysqli
y solo si no existe intenta usar las funciones antiguas de mysql
).

@CJDennis, eso es exactamente lo que dije respecto a la obsolescencia. Si crees que hay un error en mi inglés, eres más que bienvenido a editar la respuesta ;)

Además de la respuesta de @MarkKaplun, publico algo de código de la clase wpdb:
Aquí se muestra cómo se determina wpdb::use_mysqli
:
Se inicializa con:
/**
* Define si se debe usar mysqli en lugar de mysql.
*
* @since 3.9.0
* @access private
* @var bool
*/
private $use_mysqli = false;
y luego en el constructor de wpdb
tenemos:
/* Usar ext/mysqli si existe y:
* - WP_USE_EXT_MYSQL está definido como false, o
* - Es una versión de desarrollo de WordPress, o
* - Se está ejecutando PHP 5.5 o superior, o
* - ext/mysql no está cargado.
*/
if ( function_exists( 'mysqli_connect' ) ) {
if ( defined( 'WP_USE_EXT_MYSQL' ) ) {
$this->use_mysqli = ! WP_USE_EXT_MYSQL;
} elseif ( version_compare( phpversion(), '5.5', '>=' ) || ! function_exists( 'mysql_connect' ) ) {
$this->use_mysqli = true;
} elseif ( false !== strpos( $GLOBALS['wp_version'], '-' ) ) {
$this->use_mysqli = true;
}
}

Lo que debes hacer para resolver este problema es editar tu archivo php.ini.
Ejecuta donde está php.ini
El mío lo encontré en:
/etc/php/php.ini
(aunque no sé qué sistema operativo estás usando, simplemente encuentra el tuyo)
Busca estas dos líneas:
extension=pdo_mysql.so
extension=mysqli.so
y descoméntalas. Voilà, eso hará el trabajo en cualquier momento.
Lectura adicional: https://wiki.archlinux.org/index.php/PHP

¿Estás utilizando Xampp 7.x para Windows?
Me sucedió cuando actualicé mi Xampp 5.6 a Xampp 7.1. Al inspeccionar el archivo de configuración C:\Xampp\php\php.ini, noté muchos errores relacionados con el nombre de las extensiones de PHP (carecen del prefijo php_ y el sufijo .dll). Uno de ellos está relacionado con mysqli.
La configuración incorrecta que encontré allí:
extension=mysqli
La configuración correcta (después de editar esta línea):
extension=php_mysqli.dll
Corregir eso resolvió mi problema.
Por cierto: no olvides corregir todas las demás configuraciones incorrectas (el nombre correcto de las extensiones se puede ver en C:\xampp\php\ext).
