WordPress wpdb variable indefinida

2 minutos de lectura

Estoy escribiendo un complemento y tratando de solicitar algunos datos de una tabla personalizada en mi base de datos usando:

$current_text = $wpdb->get_results("SELECT text FROM addtext ORDER BY id DESC LIMIT 1");

pero solo aparece el error Variable indefinida: wpdb

¿Alguna idea de por qué esto no funciona? Seguí los documentos y busqué en Google, sin suerte. Todavía es bastante nuevo en los complementos de WP, por lo que probablemente sea algo obvio.

¡Gracias!

necesitaba usar global $wpdb; en mi función.

  • 2,5 años después, y tu respuesta me ayudó. ¡Gracias!

    – Brandon

    9 de agosto de 2013 a las 16:23

  • 3 años después, y tu respuesta también me ayudó. ¡Gracias!

    – Valentín Mercier

    3 de enero de 2014 a las 12:48

  • 4 años después, ¡y tu respuesta lo hizo de nuevo! ¡Gracias!

    – Markvds

    10 de marzo de 2015 a las 13:16

  • 5 años después, ¡y tu respuesta lo hizo de nuevo! ¡Gracias!

    – Sasa1234

    16 de abril de 2016 a las 11:36

  • 9 años después, ¡y tu respuesta lo hizo de nuevo! ¡Gracias!

    – MattFisch

    7 de julio de 2020 a las 8:27

avatar de usuario
RalphLa MaravillaLlama

Una nota para agregar: no puede usar global dentro de una clase, y por supuesto tienes que usar global para que sus objetos funcionen usando $wpdb.

Si bien no puedes usar global inmediatamente dentro de una clase, debes declarar $wpdb como global dentro de una función dentro de la clase, y esto funciona.

por ejemplo, esto te da un error:

class wpdb_test {
        global $wpdb; // can't use global as a direct 'child' of a class
        public function __construct () {
            ...
        }
}

Porque global no se puede usar directamente dentro de una clase. Del mismo modo, simplemente haciendo referencia $wpdb dentro de la clase además te da un error porque el objeto no sabe qué $wpdb es. tienes que declarar $wpdb como global desde dentro de una función que está dentro de tu clase.

por ejemplo, esto funciona bien:

class wpdb_test {
        public $variable_name;
        public function __construct () {
            global $wpdb; // safe to use because it's inside a function
            ...
        }
}

…y porqué $wpdb ha sido declarado global dentro de una función en el interior una clase que eres capaz de usarla.

  • Gracias @RalphTheWonderLlama, acabas de ahorrarle algo de frustración a un novato de php.

    – KDev

    22 de septiembre de 2021 a las 11:42

¿Ha sido útil esta solución?