web-dev-qa-db-ja.com

ウィジェット内で$ wpdbオブジェクトを使用する

私の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;
}

前もって感謝します。

2
Honus Wagner

本当に単一行が必要な場合は、代わりに$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を使用することを検討しましたか?ユーザーを削除したときなどにレコードがクリーンアップされるなど、ネイティブのテーブルと関数を使用することには多くの利点があります。

1
wyrfel

$wpdb->get_results() は、複数の行をオブジェクトの配列(または$outputパラメータに応じて配列の配列)として返します。あなたが欲しいのは $wpdb->get_row() です。

2
Jan Fabry

結果は単数のオブジェクトではなく、オブジェクトの配列として返されます。

この行は結果をオブジェクトとして扱います。

$clientRow->status

実際にあなたがオブジェクトを持つ配列を持っているとき、これは最初のものを参照するでしょう。

$clientRow[0]->status

あなたが結果から何を期待しているのか全くわからないので、うまくいけば上記の情報は問題を解決するのに十分であると思いますか?

ちょっと注意してください、あなたはこれを必要としないかもしれません..

$current_user = wp_get_current_user();

$current_userスコープを与えることで十分なはずです。

1
t31os