¿Cómo recuperar y mostrar datos de una tabla personalizada de base de datos en el área de administración?

11 ene 2015, 00:21:00
Vistas: 23.9K
Votos: 2

Tengo un problema con un plugin que estoy desarrollando y me pregunto si alguien puede arrojar algo de luz sobre la situación, ya que muchas, MUCHAS búsquedas no han dado ningún resultado. :-/

Básicamente, mi plugin crea varias entidades personalizadas en la base de datos de WordPress, que funcionan bien. He añadido una función shortcode para agregar un formulario a una página para enviar información, que también funciona bien.

Mi problema es que cuando quiero recuperar datos de dichas entidades personalizadas y mostrarlas en la sección de administración de WordPress (ya sea en un widget del dashboard o en una página personalizada del plugin), no funciona. Punto final.

Mi función de ejemplo para recuperar los datos es la siguiente:

function showApplicants(){
global $wpdb;

$appTable = $wpdb->prefix . "applications";
    $query = $wpdb->prepare("SELECT * FROM $appTable WHERE %d >= '0'", RID);
    $applications = $wpdb->get_results($query);

    foreach ( $applications as $application ) 
{
echo $application->title . " " . $application->app_firstName . " " . $application->app_surName . "<br/>";
}

}

Curiosamente, cuando este código se coloca en una página fuera del área de administración de WordPress (por ejemplo, una página creada en WordPress, a través de una función shortcode (que simplemente muestra este código), o en una página que creo y agrego yo mismo con este código en la plantilla), ¡funciona! Recupera la información correcta y la muestra como se espera.

Si lo agrego a un widget del dashboard, no funciona. Si lo agrego a una página personalizada dentro de la sección de administración, tampoco funciona.

Estoy desconcertado. ¿Algún consejo?

PD - Para evitar confusiones, la variable global $wpdb está declarada más arriba en el código, así que no es necesario declararla nuevamente (aunque intenté declararla de nuevo dentro de la función y tampoco funcionó).

¡Cualquier ayuda será muy apreciada!

¡Muchas gracias!

2
Comentarios

$wpdb->prepare() necesita al menos dos argumentos, y sí, necesitas un global $wpdb en tu función, y esa función debe llamarse después de que WordPress haya establecido esa variable.

fuxia fuxia
11 ene 2015 00:39:18

¡Ah, lo solucioné! Código completo para cualquiera que tenga este problema a continuación. ¡Gracias toscho!

prettyfly prettyfly
11 ene 2015 01:08:38
Todas las respuestas a la pregunta 1
0

Código funcional para agregar un widget al panel de WordPress con información de una base de datos personalizada:

/**
 * Agrega un widget de aplicaciones al panel de control.
 */
function addApplicationWidget() {
    wp_add_dashboard_widget(
                 'submitted_applications',         
                 'Aplicaciones Enviadas',        
                 'showApplicants' 
        );  
}
add_action( 'wp_dashboard_setup', 'addApplicationWidget' );

function showApplicants() {
    global $wpdb;

    $appTable = $wpdb->prefix . "applications";
    $query = $wpdb->prepare("SELECT * FROM $appTable WHERE %d >= '0'", RID);
    $applications = $wpdb->get_results($query);

    foreach ( $applications as $application ) {
        echo $application->title . " " . $application->app_firstName . " " . $application->app_surName . "<br/>";
    }
}
11 ene 2015 01:09:31