web-dev-qa-db-ja.com

PHP functions.phpに含まれているファイルが動作しないようです

これはWordPress StackExchangeに関する私の最初の投稿です。私は正確に説明します。

私の質問です: 私が私のテーマのfunctions.phpファイルに含まれているファイルに特にすべきことはありますか?

私はWordPressテーマを作成しています、そして私の functions.php ファイルは今とても大きくなっています。私はいくつかの機能をプラグインに変えることによって多くのコードを削除することに成功したが、それはまだ巨大です。

includesでコードを整理したいと思います。いくつか試してみましたが、うまくいきませんでした。 functions.phpファイルに含まれているファイルが無視されているようです。

// Configure the WordPress Customizer
require(get_template_directory_uri() . '/admin/customizer/customizer.php');

上記のコードは、WordPressカスタマイザでセクション、設定およびコントロールを作成する関数を追加しているファイルを呼び出すことになっています。関数が直接functions.phpファイルに に配置されている場合、 すべて問題なく動作しますが、含めようとしても何もしません。

インクルードファイルにはincludesも含まれていますが、これが関連性があるかどうかはわかりません。

上記のコードは after_setup_theme にフックされています、もし私が何か別のことをするべきだと思えば、教えてください。

1
donnie_g

私はいつも自分のfunctions.phpをもっと管理しやすい、特定の機能ファイルに分割します。例えば、フッター関連の関数はすべてfooter-functions.phpというファイルに入り、ページ区切り関数はpagination-functions.phpというファイルに入ります。このようにして、私のコードは整理され、管理しやすく、functions.phpを殺しません。ただし、これはテーマ固有の機能にのみ関連し、サイト固有の機能ははるかに同じ種類のメソッドでプラグインに組み込まれます。

要点に戻るために、最後に、私は以下のようにrequire_once()functions.phpにすべての私の小さい特定の機能ファイルを含めます

require_once( 'footer-functions.php' );
require_once( 'pagination-functions.php' );

これだけで十分です。これをフックにフックしたり、関数に追加したりしないでください。サイトが壊れる可能性があるため、予想される動作が発生する可能性があります。

2
Pieter Goosen

あなたの問題は、インクルードパスにget_template_directory_uri()関数を使っていることです。関数名で示されるように、これはURI(パスではありません)を返します。これは、あるphpファイルを別のものにインクルードするのには役に立ちません。

含めるファイルの相対パスを入力するだけです。

例えば。あなたの構造が

/my-theme
 |--functions.php
 |--/lib
     |--customizer.php
     |--tools.php
 |--style.css
 ...etc

あなたのfunctions.phpに簡単に置く

<?php

require_once('lib/customizer.php');
require_once('lib/tools.php');

require()require_once()include()のどちらを使っても、アプローチは同じです。

1
harryg

私の意見では、あなたの関数ファイルはあなたが望むほど大きくすることができますが、関数をインクルードにまとめることは非常に論理的なプロセスです。最初に、get_template_directory_uri()が正しいパスを返していることを確認します。/admin /があなたのテーマルートにあるならば、あなたはあなたのテーマの中にフルパスなしでファイルを含めることもできます:require( '/ admin/customizer/customizer.php');

0
Innate