Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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');
t_okubo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした