「Wordpress」カテゴリーアーカイブ

WordPressのfunctions.phpが上書きされないように子テーマを作成する

WordPress のテーマやカスタマイズについて全く知識がなかったので
google の広告を表示するための関数を親テーマの functions.php に直接記述していました。

そのため、テーマの更新の度に functions.php に追記したショートコードが消えるという事態が発生していました。
今回はそれを回避するために、子テーマを作成します。

やることは下記の3つです。

1.wordpress/wp-content/themesに子テーマのディレクトリを作成
2.子テーマのディレクトリに style.cssを作成
3.子テーマのディレクトリに functions.php を作成

では詳細を見ていきましょう。

———————————広告———————————

———————————広告———————————

1.wordpress/wp-content/themes に子テーマのディレクトリを作成

そのままですが子テーマのディレクトリを作成します。
私は親のテーマとして twentyfourteen を使用しているため、
my-twentyfourteen というディレクトリを作成しました。
作成後の状態はこんな感じです。

2.子テーマのディレクトリに style.css を作成

子テーマのディレクトリを作成しましたら、次は子テーマで使用するスタイルシートを作成します。
今回は特に新たに定義することもないのでファイルの中身はシンプルです。

Theme Name はテーマの管理ページで表示される名称です。お好きなようにつけて下さい。設定次第かも知れませんが日本語でつけると私の環境では文字化けしました。

Template は元にする親テーマのディレクトリ名をつけて下さい。ここは間違えるとエラーになり正しく表示されなくなりますので間違えないようにしましょう。

3.子テーマのディレクトリに functions.php を作成

次に functions.php を作成します。
中身はこんな感じです。

add_action 関数の呼び出しと関数 theme_enqueue_styles は中身をそのままにして上の通りに記述してください。
この記述がない状態だと親のスタイルシートが読み込まれず正しく表示されなくなります。

上記の記述をした後に続けてショートコードを追加すればそのまま使えるようになります。
子テーマに記述した関数なので親テーマを更新しても、このファイルに影響が及ぶことはありません。

style.css に import を記述して親テーマの スタイルシートを読み込むやり方は現在では使用が推奨されていないようです。
必ず functions.php の中に wp_ecquere_scripts を書いて読み込むようにしてください。

上記手順を全て終えたら、テーマの管理ページを開いてみましょう。
Theme Name で指定した名称のテーマが作成されているはずです。
ライブプレビューで表示や追加したショートコードに問題がないことを確認したら有効化して反映させましょう。

これで親テーマを更新しても functions.php に影響を及ぶことはなくなりました。お疲れ様でした。

WordPressの更新でFTPの画面が出る場合の対処

WordPressの更新でFTPの画面が出てしまう場合にチェックするべき項目。

1.Wordpressディレクトリの権限が適切に設定されているか
2.Webサーバーが Apache の場合の実行ユーザーの確認
3.Webサーバーが Nginx の場合の実行ユーザーの確認
4.PHP-FPMの実行ユーザーの確認 ← 私はここに該当

各チェック項目の詳細に行く前に、そもそもなぜ FTP の画面が出てきてしまうのかについて理解をしておきましょう。
Wordpress や Plugin の更新は当然ながらファイルを書き換える必要が出てきます。ファイルの書き換えを行う場所がどこかというと、Wordpressディレクトリのファイル群が対象となります。
そこで WordPress はまずWordpress ディレクトリのアクセス権限を確認し、ファイルの書き換えが可能かどうかをチェックします。
具体的にどういう方法でチェックをしているかというと、その仕組みは至って単純です。
まずWordpressディレクトリに一時的なファイルを作成します。
次に作成したファイルのオーナー(uid)と、Wordpress のファイルのオーナー(uid)が一致するかチェックします。
ここで一致すれば FTP の画面は出ずに更新が開始されるようになります。
なので FTP の画面が出るということは、現在更新をしようとしているユーザーと WordPress を作成したユーザーが一致していないということになります。

以上のことを踏まえた上で各項目について詳細に見ていきましょう。

1.Wordpressディレクトリの権限が適切に設定されているか

これは ls -l コマンドで確認することができます。
Wordpressのディレクトリまで移動して ls -l コマンドを実行し、ディレクトリの権限を確認してみましょう。

※Wordpressのディレクトリにアクセスできるなら WinSCP などのソフトでも所有者で確認ができます

私の環境では Web サーバーは nginx を使用しており、nginxを実行するユーザーはnginxです。
そのため wordpress のディレクトリも nginx が所有者となっています。
アクセス権限は所有者(nginx)のみ書き換え可能となっています。

なのでnginxユーザーが wordpress を更新しようとすれば ftp の画面が出ずに更新できることになります。
ここの所有者が誰になっているかを確認するのは、ここから先の項目の確認を行う上で前提となるので、きちんと確認しておきましょう。

2.Webサーバーが Apache の場合の実行ユーザーの確認

Apache の実行ユーザーを設定する場合は httpd.conf のUserディレクティブとGroupディレクティブを設定します。

3.Webサーバーが Nginx の場合の実行ユーザーの確認

nginxの実行ユーザーを設定する場合は nginx.conf のuserディレクティブで設定を行います。

4.PHP-FPMの実行ユーザーの確認

PHP-FPMを使用している場合は、PHP-FPMの実行ユーザーを確認する必要があります。
私の場合はここが初期値のままだったので、1,3の項目が設定されていても FTP の画面が出てしまっていました。
PHP-FPMの実行ユーザーを設定する場合は、php-fpm.conf のuserディレクティブとgroupディレクティブで設定を行います。

あなたが管理者でない場合は上の4つの項目を管理者に確認してもらうとすぐに原因が判明するかもしれません。

ちなみにアクセス権を下記のようにするのはセキュリティ的に危険なのでしないようにして下さい。

こうすると所有者じゃなくてもだれでも書き込み可能になるので、FTPの画面も出なくなると思いますが、危険ですのでしないように。

後、この手の問題を解決する時にwp-config.phpに

みたいな定義を記述すればいいよと書いてあるとこがありますが、これはうまくいかない気がします。
そもそも上記の条件で書き込めないから direct にできない状況になっているので、無理やり direct にした所で更新自体に失敗すると思います。
何も考えずに行動をするより、きちんと原因を究明してから行動するようにした方がいいでしょう。

———————————広告———————————

———————————広告———————————