私のWordpressデータベースと同じデータベースインスタンス内に含まれるテーブルにアクセスする非常に単純なウィジェットを作成しようとしていますが、Wordpressテーブルではありません。私は wpdbクラスをcodex に従って使っています。エラーは発生しませんが、結果も表示されません。
オブジェクトを適切に使用していますかそれとも私は自分のテーブルのために自分のアクセスクラスをロールするべきでしょうか?
これがウィジェットのコードです。
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;
}
前もって感謝します。
本当に単一行が必要な場合は、代わりに$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を使用することを検討しましたか?ユーザーを削除したときなどにレコードがクリーンアップされるなど、ネイティブのテーブルと関数を使用することには多くの利点があります。
$wpdb->get_results()
は、複数の行をオブジェクトの配列(または$output
パラメータに応じて配列の配列)として返します。あなたが欲しいのは $wpdb->get_row()
です。
結果は単数のオブジェクトではなく、オブジェクトの配列として返されます。
この行は結果をオブジェクトとして扱います。
$clientRow->status
実際にあなたがオブジェクトを持つ配列を持っているとき、これは最初のものを参照するでしょう。
$clientRow[0]->status
あなたが結果から何を期待しているのか全くわからないので、うまくいけば上記の情報は問題を解決するのに十分であると思いますか?
ちょっと注意してください、あなたはこれを必要としないかもしれません..
$current_user = wp_get_current_user();
$current_user
スコープを与えることで十分なはずです。