テーマから1つのファイルを置き換えるプラグインを作成しようとしています。それはパスへのインクルードフォルダに配置されたファイルを持っている特定のテーマのためのプラグインになります:
wp-content/theme/includes/example-file.php
このexample-file.phpはinclude
経由でもヘッダーとフッターにロードされます。
Themeがテーマのincludesフォルダではなく、自分のプラグインからそのファイルを含むように、example-file.phpを上書きするプラグインを作りたいです。
それはどのように可能です、これをするための最良の方法は何でしょうか?
プラグインで、WordPressのtheme_file_path
フィルタフックを使ってプラグインからファイルを変更します。プラグインに次のコードを使用してください。
add_filter( 'theme_file_path', 'wpse_258026_modify_theme_include_file', 20, 2 );
function wpse_258026_modify_theme_include_file( $path, $file = '' ) {
if( 'includes/example-file.php' === $file ) {
// change path here as required
return plugin_dir_path( __FILE__ ) . 'includes/example-file.php';
}
return $path;
}
次に、 get_theme_file_path
関数を使用して、ファイルをテーマに含めます。
include get_theme_file_path( 'includes/example-file.php' );
ここで、ファイルがプラグインのフィルタフックに一致すると、ファイルのプラグインバージョンが含まれます。それ以外の場合は、テーマバージョンが含まれます。
また、この方法では、プラグインが無効になっていても、テーマは変更されずに独自のバージョンのファイルで動作します。
あなたが自分のプラグインからコントロールするページテンプレートを探しているなら、あなたは この答えをチェックアウトすることができます それを行う方法を見るために。
相対パス ヘッダー内の単純なinclude
呼び出しを使用してwp-content/theme/<your-theme>/includes/example-file.php
ファイルをインクルードする場合、フッターテンプレートは次のようになります。
include 'includes/example-file.php';
PHP set_include_path()
関数を使ってプラグインのバージョンのincludes/example-file.php
ファイルに置き換えることも可能です。
一般的に言って、相対パスでファイルをインクルードするために、PHPは現在のディレクトリでファイルを探します。ただし、PHPが最初に別のパスで検索するように操作することができます。その場合は、プラグインのメインのPHPファイルで次のPHPコードを使用して、プラグインのディレクトリをPHPのデフォルトのインクルードパスに含めます。
set_include_path( plugin_dir_path( __FILE__ ) . PATH_SEPARATOR . get_include_path() );
その後、header.php
、footer.php
などの相対パスを持つinclude
については、PHPはまずプラグインのディレクトリでファイルを探します。
ただし、このメソッドでは、ヘッダー、フッターなどに絶対パスを使用してファイルをインクルードすると、機能しませんとなります。
これを試してください。ページテンプレートを使用している場合、これは機能します。
add_filter("page_template", "plugin_function_name");
function plugin_function_name($page_template)
{
$id = substr($page_template, strrpos($page_template, '/') + 1);
if ($id == 'includes/example-file.php') {
$page_template = plugin_dir_path(__FILE__) . 'includes/example-file.php';
}
return $page_template;
}