フレキシブルにお客様のご要望にあわせ提供します.

WordPress にユーザパスワードなし(入力不要)でログインしよう(API等不要)


API 利用など不要であり, WP関数すら使わず, WP本体にも, WPの設定すら触る必要がありません。なので要らなくなったらこれを削除すればいいだけです。
(入力せずログインなど, 本来はやらない機能のために本体をいじる方法よりは, 本体に全く干渉しない方法が私はよいと思うのですが・・どうでしょうか・・)

下記の PHP を各自の環境にあわせて修正し、Wordpress 直下フォルダにおきます。そして GET変数でアクセスすればログインできます。
一見、セキュリティ上はどうかと思いますが、ページ名・GET変数・GET変数値を複雑なものにしておけば、そうそうアクセスできないのではないでしょうか。
GET変数も含めたURLをショートカットリンクにしておけば、クリックすればすぐにログイン。もちろんクッキー記憶とか関係ありません(通常の方法でログインができれば、ログインできます。)

似たようなコンセプトの記事は Web上にあったのですがそれらはWP機能を使うものでした。
以下のコードは,2023年現在 WordPress6 で動作します。

意外と WPの機能に固執するより, HTML&Javascriptの基礎でやれる方法を考えた方が早道かもしれません。
 


<?php 

//このページを wordpress 直下に配置する。 この pageネームを "任意ログイン.php" とすると,  「https://www.任意のドメイン/任意ログイン.php?任意のGET変数=任意の値」で アクセスできる。
//その GET変数を含むショートカットを作っておけば、打ち込むことなくすぐにアクセスできる。クッキーが切れていても勿論。
//ただし極端に通信速度が遅い場合はアクセスできない場合があるが、更新ボタンを押して読み直せばだいたいイケる。

//セキュリティ上どうかと思うが, このページ名, GET変数名, GET変数値を複雑にしておけば, そうそうアクセスできないのではないか。


$login = <<< HTML

<html>
<body>

<script>

var flag=0;


const mainWindow= window.onload = function() {

document.loginform.target = "targetFrame";
document.loginform.method = "post";
document.loginform.submit();

document.getElementById('targetFrame').onload = function() {

if(flag==0){
document.loginform.submit();
flag=1;
}


};
          

};

</script>

<style>

#wrap_mienai { display:none;}

</style>

<div id="wrap_mienai">
<form name="loginform" id="loginform" action="https://www.xxxxxxxxxxxxxx.jp/wp-login.php" method="post">
<p>
<label for="user_login">ユーザー名またはメールアドレス</label>
<input type="text" name="log" id="user_login" class="input" value="ログインID" size="20" autocapitalize="off" autocomplete="username" required="required" />
</p>

<div class="user-pass-wrap">
<label for="user_pass">パスワード</label>
<div class="wp-pwd">
<input type="password" name="pwd" id="user_pass" class="input password-input" value="ログインパスワード" size="20" autocomplete="current-password" spellcheck="false" required="required" />
<button type="button" class="button button-secondary wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="パスワードを表示">
<span class="dashicons dashicons-visibility" aria-hidden="true"></span>
</button>
</div>
</div>
<p class="forgetmenot"><input name="rememberme" type="checkbox" id="rememberme" value="forever"  /> <label for="rememberme">ログイン状態を保存する</label></p>
<p class="submit">
<input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="ログイン" />
<input type="hidden" name="redirect_to" value="https://www.xxxxxxxxxxxxxx.jp/wp-admin/" />
<input type="hidden" name="testcookie" value="1" />
</p>
</form>

</div>


<iframe name="targetFrame" id="targetFrame" width="100%" height="100%" >
</iframe>

</body>
</html>

HTML;


if(isset($_GET["任意のGET変数"])){
if($_GET["任意のGET変数"]=="任意の値"){echo $login;}
}



?>

ボタンや入力のフォームがありますが、実はそれらは WordPressのログインページにあるものをそのまま持ってきています。div名などを変えるとよくないようですので
そのままお使いください。

HTMLフォームの制御においては iframe を使いました。新しいウインドウ・タブを出すより frameに埋め込んだほうがシンプルにできました。
フォームのコードがありますが, 実際には見えずに、すぐにログインに遷移します。

若し WordPress の major version が現在の6 から upした際は、動作しなくなる可能性もあります。その場合も矢張り、 WordPress 本体を参考にしてみましょう。