私はその中に最大30個のテンプレートを持つことになるサイトに取り組んでいます。
私はすべてのテンプレートをテーマフォルダのルートに配置して、すべてが雑然としないようにしたいと思います。
テーマフォルダのサブディレクトリをスキャンできるようにするために、ファイルwp-admin/includes/theme.php
内のget_page_templates()
関数を変更する方法を知っています。しかし、私は手動でコアファイルを変更したくありません - どうすれば私はfunctions.php
に入れたフィルタでget_page_templates()
にフィルタを適用できますか?
下記のコードは私が最初に試みたものですが、コードをfunction.php
の中に入れてもまだうまくいきません。
しかしながら、私はこれらの変更をコアファイルwp-admin/includes/theme.php
に入れることができますが、それは良い習慣ではなく、自動更新がそれを一掃する可能性があるので常に避けるべきです。
function get_page_templates_override()
{
$themes = get_themes();
$theme = get_current_theme();
$templates = $themes[$theme]['Template Files'];
$page_templates = array();
if ( is_array( $templates ) ) {
$base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) );
foreach ( $templates as $template ) {
$basename = str_replace($base, '', $template);
// modifide this by commenting it out so that sub dirs arent blocked
// if ( false !== strpos($basename, '/') )
// continue;
// modified this with FILE_USE_INCLUDE_PATH so sub dirs get scanned
$template_data = implode( '', file( $template, FILE_USE_INCLUDE_PATH ));
$name = '';
if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) )
$name = _cleanup_header_comment($name[1]);
if ( !empty( $name ) ) {
$page_templates[trim( $name )] = $basename;
}
}
}
return $page_templates;
}
add_filter('get_page_templates','get_page_templates_override', 1);
その部分は非常に厳格です、これを参照してください プラグインディレクトリからページテンプレートをロードすることについての質問 。
関連コードの現状では、これに時間を費やす必要はありません。特に便利さ(テンプレートをサブディレクトリに置くこと)と機能性(プラグインフォルダからロードするようなもの)のためにそれが欲しいので。
WP 3.4(ほぼ1年前)以降、テンプレートファイルをテーマルートの下のディレクトリに配置することが可能になり、WordPressが必要に応じてそれらを検出して使用するようになりました。
http://nacin.com/2012/03/29/page-templates-in-subdirectories-new-in-wordpress-3-4/ のように。