Получение и отображение данных из пользовательской таблицы БД в административной области

11 янв. 2015 г., 00:21:00
Просмотры: 23.9K
Голосов: 2

У меня возникла проблема с плагином, который я разрабатываю, и я надеюсь, что кто-то сможет помочь разобраться в ситуации, так как множество поисков не дали никаких результатов. :-/

По сути, мой плагин создает несколько пользовательских сущностей в базе данных WordPress, которые работают нормально. Я добавил функцию шорткода для добавления формы на страницу для отправки информации, которая тоже работает нормально.

Моя проблема заключается в том, что когда я хочу получить данные из этих пользовательских сущностей и отобразить их в административной части WordPress (либо в виджете панели управления, либо на пользовательской странице плагина), это просто не работает. Точка.

Мой пример функции для получения данных выглядит следующим образом:

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/>";
}

}

Странно, но когда этот код размещается на странице вне административной области WordPress (например, на созданной в WordPress странице через функцию шорткода (которая просто выводит этот код) или на странице, которую я создаю и добавляю сам с этим кодом в шаблоне), он работает! Получает правильную информацию и отображает её как ожидается.

Добавляю его в виджет панели управления - не работает. Добавляю его на пользовательскую страницу в административном разделе - опять не работает.

Я в тупике. Есть какие-нибудь советы?

P.S. - Во избежание путаницы, глобальная переменная $wpdb объявлена выше в коде, поэтому нет необходимости объявлять её снова (хотя я пробовал объявлять её снова внутри функции, и это всё равно не работало).

Буду очень признателен за любую помощь!

Спасибо большое!

2
Комментарии

Метод $wpdb->prepare() требует как минимум два аргумента, и да, вам нужен global $wpdb в вашей функции, причем эта функция должна вызываться после того, как переменная будет установлена WordPress.

fuxia fuxia
11 янв. 2015 г. 00:39:18

Ах, решил проблему! Полный код для тех, у кого такая же проблема, ниже! Спасибо toscho!

prettyfly prettyfly
11 янв. 2015 г. 01:08:38
Все ответы на вопрос 1
0

Рабочий код для добавления виджета в админку WordPress с информацией из пользовательской базы данных:

/**
 * Добавляем виджет заявок на главную страницу админки.
 */
function addApplicationWidget() {
    wp_add_dashboard_widget(
                 'submitted_applications',         // Идентификатор виджета
                 'Поданные заявки',               // Заголовок виджета
                 '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 янв. 2015 г. 01:09:31