2011-06-02 11 views
6

He estado desarrollando durante algún tiempo en un plugin en wordpress, pero un problema me sigue molestando. Quiero exportar una tabla de base de datos como un archivo de Excel y, por lo tanto, necesito acceder al archivo global $wpdb->variable desde un archivo en mi directorio de complementos.

Encontré una entrada de blog que explica qué clases debería incluir, pero esto no funciona (el enlace está debajo). Como puede ver, hago un var_dump, pero nunca llega a ese punto. Si dejo el include de wp-config y wp-load fuera del código, el volcado returns NULL, entonces supongo que hay un problema con las importaciones.

De todos modos, esperaba que alguien me pudiera ayudar con este problema. No necesariamente necesito una solución para mi enfoque, solo necesito una manera de exportar una matriz de datos (extraídos de mi base de datos) para sobresalir en WordPress. Cualquier ayuda sería apreciada. Gracias por adelantado.

http://www.notesbit.com/index.php/web-mysql/web-scripts/standalone-access-the-wordpress-database-using-wpdb/

include_once('../../../wp-config.php'); 
include_once('../../../wp-load.php'); 
include_once('../../../wp-includes/wp-db.php'); 

var_dump($wpdb); 
$filter = get_where_clause(); 
$order = get_order_by_clause(); 

$data = $wpdb->get_results("SELECT * FROM " . $table_prefix . "team_data" . $filter . $order, ARRAY_A); 

$result = array(); 

EDIT: que no puede incluir la wp-config, da errores constantes. Sé dónde está ocurriendo el error, solo necesito encontrar una solución alternativa. cuando se mira en la página wp-settings (que está incluido por el wp-config) se encuentra esta línea de código:

foreach (wp_get_active_and_valid_plugins() as $plugin) 
    include_once($plugin); 
unset($plugin); 

aquí es donde hay un error. Simplemente no sé cómo debería solucionar este error.

EDIT 2: Problema resuelto. Al incluir el archivo, incluí el wp-config más de una vez (aunque dije que solo debería incluirse una vez). Resolví el problema usando el siguiente código.

global $wpdb, $table_prefix; 

if(!isset($wpdb)) 
{ 
    require_once('../../../../wp-config.php'); 
    require_once('../../../../wp-includes/wp-db.php'); 
} 
+1

¿Qué versión de WordPress estás usando? Solo tengo esta línea: 'require_once (ABSPATH. 'Wp-settings.php');' –

+0

'require_once (ABSPATH.' Wp-settings.php ');' está en el archivo wp-config. deberías buscar las líneas con errores en wp-settings.php :) (y estoy usando la última versión de wordpress por cierto). –

+0

¿Qué mensajes de error exactos está recibiendo? –

Respuesta

9

Si está creando un plugin de WordPress, no necesita incluir esos archivos manualmente.

Si desea exportar su tabla, ¿por qué no crea una función/clase para ella y le pasa el $wpdb (si la necesita). También puede usar la clase MySQLi normal (desde PHP) acceda a su base de datos MySQL.


Si simplemente desea tener acceso a la base de datos MySQL con los valores de inicio de sesión almacenados que son utilizados por WordPress, puede incluir la wp_config -file de la raíz-directorio de WordPress. Tiene algunos (autoexplicativas) Campos globales que se podrían utilizar para conectarse a la base de datos:

include "WP-ROOT-PATH/wp-config.php"; 
$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
// Test the connection: 
if (mysqli_connect_errno()){ 
    // Connection Error 
    exit("Couldn't connect to the database: ".mysqli_connect_error()); 
} 

Después de que usted tiene una instancia de la clase MySQLi (como se mencionó anteriormente) que se puede utilizar para acceder a su base de datos .

No estoy seguro de si este es el camino perfecto pero funciona.


para depurar WordPress (si algo no funciona y no hay error-mensaje) debe activar la depuración en el wp-config.php -file:

/** 
* For developers: WordPress debugging mode. 
* 
* Change this to true to enable the display of notices during development. 
* It is strongly recommended that plugin and theme developers use WP_DEBUG 
* in their development environments. 
*/ 
define('WP_DEBUG', true); 

Además, si se está probando su scripts PHP en un servidor local, se debe girar a la display_error a on en su php.ini -file:

; This directive controls whether or not and where PHP will output errors, 
; notices and warnings too. Error output is very useful during development, but 
; it could be very dangerous in production environments. 
display_errors = On 

Sin embargo, este shoul solo se realizará en su servidor de prueba local, no en un escenario productivo.

+1

Tengo que incluirlos manualmente, porque si deseo desencadenar una descarga de Excel, no puedo hacer eso desde el admin.php de wordpress (la información del encabezado no se puede pasar, no me preguntes por qué). Así que llamo a un archivo php desde mi directorio de complementos, pero no puedo acceder a la variable $ wpdb ni a ninguna otra variable que necesite para acceder al db wordpress. –

+0

No se puede enviar la información del encabezado porque cambia el encabezado después de que algo ya se haya impreso. Deberías (como dije) crear una nueva clase en un nuevo archivo y pasarle el '$ wpdb'-Object. –

+0

¿Y cómo debería pasar la variable $ wpdb a esa clase? porque la forma en que llamo al archivo ahora es redireccionando a otra página php. (html se muestra a continuación). Save as excel

Cuestiones relacionadas