PHP での Wordpress 管理者の自動ログイン
今日の投稿は、WordPress サイトに素敵な小さな機能をインストールする方法を説明する短い記事になります。これは安全に使用できれば非常に便利です。これは、ユーザーがログインするための汎用アカウントを提供する WordPress サイトで使用するように設計されています。たとえば、多くのバックエンド WordPress デモでは、作成者は見込み客がその製品にログインしてプレイできるように「デモ」アカウントを作成します。多くの場合、作成者は次のような通知を表示するだけです。
ユーザー名: デモ
パスワード: デモ
ここは少し歩行者用です。デモをもう少し合理的でプロフェッショナルなものにできるでしょうか?これらの資格情報を使用して WordPress 管理者に自動的にログインするための簡単なスニペットを紹介します。これは、テーマの関数ファイルにドロップすることも、独自のプラグイン ファイルに入れてアクティブにすることもできます。
これは次のような場合に役立ちます。
- サイトには、匿名ユーザーがログインできる汎用アカウントがあります。
- 「ワンクリック」ログインリンクが必要です。
- デモへの迅速かつ効率的な経路を提供し、必要な手順を最小限に抑えて、製品デモの変換を最大化したいと考えています。
- 訪問者を関連する場所 (例: 設定ページ) に直接誘導したいと考えています。
重要: 実際の権限を持つアカウントにログインするためにこれを使用しないでください。例えば。管理者/編集者アカウントなど
このスニペットは慎重に使用してください。
他のチュートリアルで行ったように、読書が苦手な人でもすぐに実験できるように、最初に注釈付きの完全なコードを提供します。次のスニペットは、スタンドアロン プラグインの形式でスタイル設定されています (私の個人的な好み)。
/*
Plugin Name: Auto Login
Plugin URI: http://hbt.io/
Version: 1.0.0
Author: Harri Bell-Thomas
Author URI: http://hbt.io/
*/
function autologin() {
// PARAMETER TO CHECK FOR
if ($_GET['autologin'] == 'demo') {
// ACCOUNT USERNAME TO LOGIN TO
$creds['user_login'] = 'demo';
// ACCOUNT PASSWORD TO USE
$creds['user_password'] = 'demo';
$creds['remember'] = true;
$autologin_user = wp_signon( $creds, false );
if ( !is_wp_error($autologin_user) )
header('Location: wp-admin'); // LOCATION TO REDIRECT TO
}
}
// ADD CODE JUST BEFORE HEADERS AND COOKIES ARE SENT
add_action( 'after_setup_theme', 'autologin' );
使用法
使い方はとても簡単です。アカウントのユーザー名とパスワードはプラグイン ファイル (上記のコード) で指定されており、ログインするには、単にアクセスするだけです。 http://example.com/wp-login.php?autologin=demo
すぐに wp-admin にリダイレクトされ、指定したアカウントにログインします。ただし、資格情報が間違っている場合は、通常どおりログイン フォームが表示されるはずです。
カスタマイズ
このスニペットは非常に簡単にカスタマイズできます。基本的に編集する必要があるのは 3 つだけで、これらの変更はすべて次のコード ブロック (完全なコードの 11 行目から 17 行目) で行われます。
if ($_GET['login'] == 'dummy_account') {
// ACCOUNT USERNAME TO LOGIN TO
$creds['user_login'] = 'dummy';
// ACCOUNT PASSWORD TO USE
$creds['user_password'] = 'pa55word';
最初の行には、URL パラメータの条件チェックが表示されます。上記のコード ブロックは以下をチェックします。 wp-login.php?login=dummy_account
これらの値は任意に指定できますが、「loggedout」、「action」、「redirect_to」などの元の WordPress パラメータを避けるように注意してください。 4 行目では、ログインに使用するユーザー名を指定します。カスタマイズされたコード スニペットは、「ダミー」アカウントへのログインを試行します。おそらくご想像のとおり、7 行目でパスワードを指定します。上記パスワードは「pa55word」です。これらの値を入力すれば準備完了です。
拡張機能
現時点では、スニペットは 1 つのアカウントに自動ログインするようにのみ設定されています。異なるアカウントに異なるログイン リンクが必要な場合はどうすればよいでしょうか?これは非常に迅速かつ簡単に行うことができ、スニペット全体を何度も繰り返す必要はありません。以下の私の解決策を見てください。
/*
Plugin Name: Auto Login
Plugin URI: http://hbt.io/
Description: Create convenient auto-login links to quickly login to generic accounts. Configure source code to make changes.
Version: 1.0.0
Author: Harri Bell-Thomas
Author URI: http://hbt.io/
*/
// Declare global var's
global $login_parameter, $accounts;
// THE PARAMETER TO CHECK FOR
// eg. http://exmaple.com/wp-login.php?param_name=account
$login_parameter = "autologin";
// ACCOUNT CODE BLOCK
$accounts[] = array(
"user" => "demo",
"pass" => "demo",
"location" => "wp-admin",
);
// END ACCOUNT CODE BLOCK
// EDIT AND REPEAT CODE BLOCK FOR AS MANY ACCOUNTS AS NEEDED
// Another example iteration
$accounts[] = array(
"user" => "tcwp",
"pass" => "demo",
"location" => "wp-admin/?tcwp-sent-me",
);
// SEE PREVIOUS EXAMPLE FOR DETAILS ABOUT THIS FUNCTION
function autologin() {
global $login_parameter, $accounts;
foreach ($accounts as $account) {
if ($_GET[$login_parameter] == $account['user']) {
$creds['user_login'] = $account['user'];
$creds['user_password'] = $account['pass'];
$creds['remember'] = true;
$autologin_user = wp_signon( $creds, false );
if ( !is_wp_error($autologin_user) )
header('Location: ' . $account['location']);
}
}
}
add_action( 'after_setup_theme', 'autologin' );
これは本質的には同じですが、生意気な foreach ループに加えて、アカウント配列もスローされています。 autologin() 関数の構造は、そのコードがアカウントごとに (foreach ループを使用して) 繰り返される点を除いて同一です。関連するすべての詳細がグローバル配列に保存されるようになりました。上の例は 2 つのアカウント用に設定されていますが、スニペットは必要な数だけアカウントに対応できます。追加のアカウントを追加するには、次のコード ブロックを必要な数だけカスタマイズして追加するだけです。
// ACCOUNT CODE BLOCK
$accounts[] = array(
"user" => "anotheraccount",
"pass" => "public_password",
"location" => "http://YouCanPutURLsHereToo.com/",
);
// END ACCOUNT CODE BLOCK
また、パラメータ名もグローバル変数に移動していることに気づくでしょう。これは必須ではありませんが、単に autologin() 関数からすべてのハードコードされた値を削除するためにそうしました。
結論
このスニペットは、製品デモ サイトなどでの軽量な使用向けに設計された単純な関数にすぎませんが、より複雑なログイン シナリオでも使用できる可能性があります。コードの残りの部分は一目瞭然ですが、私が何をしたか、またはなぜそれを行ったのかについて質問がある場合は、下にコメントを残すか、ツイートしてください。フィードバック/提案/アイデアがある場合は、以下のコメントセクションにコメントを残してください。