4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Theme My Login でテンプレートパスを変更する

Posted at

Theme My Login について

有名なWordPressプラグインなので今さら説明するまでも無いかもしれませんが、例えば「WordPressで会員向けサイトを作りたいけど、独自のユーザー管理とかじゃなくて出来るだけWordPressの標準機能を使ったものが良いよ―!でもユーザーがログインする時に/wp-admin/とかwp-login.phpにアクセスして欲しくないよ―!」とかいう場合にまあ効果的なプラグインで、大雑把に言うと、フロントエンドでログイン画面やプロフィール画面、ユーザー登録画面、パスワード変更画面などを呼び出すことが出来るプラグインです。

各画面のテンプレート

ログイン画面やユーザー登録画面など各画面のテンプレートは、「/wordpress/wp-content/plugins/theme-my-login/templates」以下に配置されており、これらのテンプレートはTheme My Loginを有効化することで、通常何もしなくても勝手に呼びだされます。

テンプレートの内容を変更したい

ではテンプレートの内容を変更したい場合はどうすればよいでしょうか?
プラグインの公式サイトでは以下のように記載されています。

All of the templates located within /wp-content/plugins/theme-my-login/templates are easily customizable. Just simply pick any template you wish to edit, copy it to your current theme’s directory and edit it as you wish. Theme My Login will always look for templates in your current theme’s directory first, before loading it’s own templates.

つまり、Theme My Loginは最初に現在利用中のテーマのディレクトリを確認した後にプラグイン本体のtemplatesを読みに行くので、なんか変更したいのであれば、変更したいテンプレートファイルを利用中のテーマディレクトリにコピーし、勝手に編集しちゃいなよと言うことです。

例えばログイン画面を編集したい場合は、「/plugins/theme-my-login/templates/login-form.php」をコピーして、利用中のテーマディレクトリの直下にコピーすることで、テーマディレクトリのlogin-form.phpが優先して読み込まれるようになります。

テーマディレクトリの「直下」に置かないとダメなの???

ここからようやく本題ですが、何もしない状態だとテーマディレクトリの直下に置かないと認識されません。
しかし、ただでさえ汚いテーマディレクトリの中身がこれ以上汚くなるのは精神衛生上耐えられない。Theme My Login関連のテンプレートは「tml-templates」などのディレクトリにまとめたいというのが人情というものです。

フィルターフックを使おう

危うく憤死寸前でしたが、普通に考えてテンプレートパスを任意に変更できないようにしているわけがありません。**「tml_template_paths」**というフィルターがちゃんと用意されていました!

もうテキスト入力するのが面倒くさくなってきたので、以下のコードをテーマのfunctions.phpに突っ込んで好きなパスに書き換えちゃて下さい。
後は指定先のディレクトリに「login-form.php」「register-form.php」「resetpass-form.php」などを入れれば優先的に呼び出されるようになります。
以下のコード例ではテーマディレクトリ以下に「tml-templates」というディレクトリを作成し、その中に各テンプレートファイルを配置する事を想定しています。

functions.php
/*
 *
 * theme my login の テンプレートパスを変更(テーマファイルのtml-templatesディレクトリに変更)
 *
 */
function tml_tpl_path_overwrite($args){
  $args[0] = get_stylesheet_directory() . '/tml-templates';
  return $args;
}
add_filter( 'tml_template_paths', 'tml_tpl_path_overwrite');
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?