web-dev-qa-db-ja.com

テーマ内のサブフォルダからテンプレートファイルをロードする

私はその中に最大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);
4
MrStack

その部分は非常に厳格です、これを参照してください プラグインディレクトリからページテンプレートをロードすることについての質問

関連コードの現状では、これに時間を費やす必要はありません。特に便利さ(テンプレートをサブディレクトリに置くこと)と機能性(プラグインフォルダからロードするようなもの)のためにそれが欲しいので。

2
Rarst

この上にいくつかのチケットがあります: #13265 そして #11216

また、各テンプレートの先頭に固定文字列を付けると、見やすくなります。

template-a.php
template-b.php

等.

1
scribu

WP 3.4(ほぼ1年前)以降、テンプレートファイルをテーマルートの下のディレクトリに配置することが可能になり、WordPressが必要に応じてそれらを検出して使用するようになりました。

http://nacin.com/2012/03/29/page-templates-in-subdirectories-new-in-wordpress-3-4/ のように。

0
Grant Palin