web-dev-qa-db-ja.com

テーブル行が存在する場合はログインを許可

WordPressログインページの検証スクリプトを調整するために、WordPressコーデックス内の "authenticate"フィルタフックを使用しています。

私がする必要があるのは、データベースに行があるかどうかを確認するために、個別のテーブルへのクエリを作成することです。

これが私のこれまでのところです。

 add_filter( 'authenticate', 'check_user_is_in_ibew_members', 40, 3 );
 function check_user_is_in_ibew_members( $user, $username, $password ) {
    global $wpdb;
    $Card = $username
    $result = $wpdb->get_results( "SELECT 1 FROM members WHERE Card = $Card LIMIT 1");
   // $query = "SELECT 1 FROM members WHERE Card = $Card LIMIT 1";
   // $result = $wpdb->get_results($query);
   foreach ($result as $query) {
        // Evaluates to true because $query is empty
        if (empty($query)) {
            echo 'Card Number is currently inactive';
        }

    }
    return $user;
 }

基本的に、ユーザーがログインしようとするとき、CardがWP usernameと等しいテーブルから1行を選択します。メンバーがデータベースに存在する場合、フォームはtrueを返して訪問者をログインします。訪問者がテーブルにない場合は、フォームはfalseを返してエラーメッセージを表示します。

うまくいかないようです。私はチェックしましたが、コード自体にはエラーがありません。そのため、コードを誤って実装していると思われます。

自分の過ちから学ぶことができるように、自分が間違ったことをしたことに関して少しの援助を得ることができますか。手助けをしてくれたすべての人に感謝します。

1
DigitalDesigner

それで私はうまくいく解決策を考え出すことができました。

これが私がしたことです。

最初に認証フィルターに夢中になりました

 add_filter( 'authenticate', 'check_user_is_in_custom_table', 30, 2 );

そこから私は自分の関数を作成しました

 function check_user_is_in_custom_table( $user, $username, $password ) {

WordPressデータベースをロードしました

 global $wpdb;

結果変数を作成しました

 $result = $wpdb->get_row( $wpdb->prepare( "SELECT User FROM custom_table WHERE User = %s", $username ) );

私は私のif文を少し編集しなければなりませんでした

 if ( is_null ( $result ) ) { //This is the edited line
   return new WP_Error( 'deactivated_in_custom_table', 'This account has been deactivated.' );
 }
 return $user;

そして最後に関数を閉じました

 }

これは自分の参考のためにこれを使いたい人のための完全なコードです。

 add_filter( 'authenticate', 'check_user_is_in_custom_table', 30, 2 );
 function check_user_is_in_custom_table( $user, $username, $password ) {
    global $wpdb;
    $result = $wpdb->get_row( $wpdb->prepare( "SELECT User FROM custom_table WHERE User = %s", $username ) );
      if ( is_null ( $result ) ) {
        return new WP_Error( 'deactivated_in_custom_table', 'This account has been deactivated.' );
      }
      return $user;
 }

これが起こるのです、ログインフォームはWordPressデータベース内のカスタムテーブルを利用して作成した検証を通して実行されます。 USerがサインオン時に提供されたユーザー名である行がテーブル内にある場合は、続行できます。カスタムテーブルにその名前のユーザがいない場合は、そのユーザにエラーメッセージが表示されます。

私の問題を引き起こしていた単一の行であることに終わったが、それはあらゆる種類のカスタム要素を書くとき頻繁に起こりうる:).

0
DigitalDesigner