WordPress のログイン リンクをつくる

WordPressでWebサイトを作成後、納品時にログイン画面のURLを伝えると、「ログインのボタンかリンクをどこかに入れてくれませんか」と言われることがあります。

WordPress標準の「メタ情報」ウィジェットは、[ログイン] 以外に [投稿の RSS] [コメントの RSS] [WordPress.org] といった項目も表示されて使いにくいし、かといってテキストウィジェットに <a href="…/wp-login.php">ログイン</a> などと書くのもスマートでない気がするので、テンプレートタグ wp_loginout() を使っています。

ショートコード例 その1

シンプルなショートコードの例です。単純に [ログイン] リンクを表示するだけですが、ログイン中は [ログアウト] リンクに変わります。

add_shortcode( 'my_loginout', function() {
	return wp_loginout( '', false );
} );

テキスト ウィジェットやカスタム HTML ウィジェットでショートコードが有効にならないようなら、下記のおまじないも追加します。(と書きつつ、ふと気づくとテキスト ウィジェットではデフォルトでショートコードが機能しています。以前はそうでなかった気がするのですが、どこかのバージョンから仕様が変わったのでしょうか…)

add_filter( 'widget_text', 'do_shortcode' );

ショートコード例 その2

wp_loginout()は、第1引数でリダイレクト先URLを指定できるので、ショートコードでも指定できるようにしてみます。

function my_loginout_func( $atts ) {
	$atts = shortcode_atts( array(
		'redirect' => $_SERVER['REQUEST_URI'],
	), $atts );
	return wp_loginout( $atts['redirect'], false );
}
add_shortcode( 'my_loginout', 'my_loginout_func' );

ショートコード内で redirect属性でURLを指定すれば、ログイン後にそのURLのページを開きます。redirectを指定しないと、ログインリンクをクリックしたときのページになります。リダイレクトしたくないときは redirect="" とします。