honuswagner
  • 0
Новичок

Использование объекта $wpdb в виджете

  • 0

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

Правильно ли я использую объект? Или я должен использовать свой собственный класс доступа для своих собственных таблиц?

Вот код виджета:

function widget ($args,$instance) 
{
        extract($args);

        global $wpdb;

        $title = $instance['title'];
        $catid = $instance['catid'];

        $current_user = wp_get_current_user();

        $sql = 'SELECT max(ID) as MaxID, status FROM Clients WHERE UserID = '.$current_user->ID;
        $clientRow = $wpdb->get_results($sql);

        $out = '<div style="text-align: center; border: solid 1px Navy; background-color: #E4E4E4">';
        $out .= '<span>Client status: '.$clientRow->status.'</span></div>';

        echo $before_widget;
        echo $before_title.$title.$after_title;
        echo $out;
        echo $after_widget;
}

Заранее спасибо.

Share
  1. Если вам действительно нужна одна строка, используйте $wpdb->get_row($sql) вместо этого.

    Но ваш запрос выглядит забавно… похоже, вы пытаетесь получить последний «статус клиента» для пользователя, и в этом случае ваш запрос должен быть:
    'SELECT status FROM Clients WHERE UserID = '.$current_user->ID.' ORDER BY ID DESC LIMIT 1' .

    И если вы это сделаете, вы можете даже использовать $status = $wpdb->get_var($sql); .

    Наконец… не рассматривали ли вы вместо этого использование add_user_meta/get_user_meta? Использование собственных таблиц и функций имеет много преимуществ, например, записи очищаются при удалении пользователя и т.п.

    • 0
  2. $wpdb->get_results() возвращает несколько строк в виде массива объектов (или массива массивов, в зависимости от $output параметра). То, что вы хотите, это $wpdb->get_row() .

    • 0
  3. Ваши результаты вернутся в виде массива объектов, а не отдельного объекта.

    Эта строка обрабатывает результат как объект.

    $clientRow->status
    

    Когда на самом деле у вас есть массив с объектами, это будет ссылаться на первое.

    $clientRow[0]->status
    

    Не совсем уверены, чего вы ожидаете от результата, поэтому, надеюсь, приведенной выше информации достаточно, чтобы решить проблему?

    Небольшое замечание, возможно, вам это не понадобится.

    $current_user = wp_get_current_user();
    

    Предоставления $current_user объема должно быть достаточно.

    • 0

Оставить ответ

You must login to add an answer.