カスタムテンプレートを作成しました。では、デフォルトで投稿にsingle.php
の代わりにテンプレートを適用するにはどうすればいいですか?
テーマのアップグレードがカスタムテンプレートに置き換えられないように、これを実行します。
single.php
テンプレートのカスタマイズ将来アップグレードしようとしているメインテーマがそれ自体子テーマではない場合は、独自の子テーマを作成し、その子テーマ内にsingle.php
テンプレートファイルを作成して、親テーマのsingle.php
をオーバーライドすることができます。このように、将来の親テーマのアップグレードがあなたのカスタマイズを置き換えることはありません。
いくつかの正当な理由で子テーマを作成したくない、または自分のテーマ自体が子テーマであり、将来それをアップグレードしたいとします。 WordPressはGrand Childテーマをサポートしていないため、いくつかの選択肢があります。
single.php
よりも優先度の高いテンプレートを使用します。WordPressテンプレート階層 に従って、single-{post-type}.php
テンプレートファイルを使用してsingle.php
を上書きすることができます。
新しいテンプレートをデフォルトで投稿に使用するので、新しいテンプレートファイルを作成してsingle-post.php
という名前を付けると、WordPressのテンプレート階層での定義方法により、デフォルトですべての投稿にsingle.php
ではなくこのテンプレートが読み込まれます。コア。
single.php
テンプレートを上書きするためのプラグインの使用single-post.php
さえあなたのテーマで利用可能であるか、あなたがそれが将来のアップグレードで追加されるかもしれないと思うならば、あなたが持っている唯一の代替手段はこの振る舞いを変えるカスタムプラグインを追加することです。
それを実現するためにsingle_template
フィルタフックを使うことができます。サンプルプラグインコード:
<?php
/*
Plugin Name: Custom Theme Utility Plugin
Plugin URI: https://wordpress.stackexchange.com/a/307541/110572
Description: Overrides single.php template for posts by default
Version: 1.0.0
Author: Fayaz Ahmed
Author URI: https://www.fayazmiraz.com/
*/
define( 'WPSE_307430_PLUGIN_TEMPLATE_DIR', plugin_dir_path( __FILE__ ) );
function wpse307430_override_single_template( $template_file, $type, $templates ) {
global $post;
if ( $post->post_type == 'post' ) {
$custom_single_template = WPSE_307430_PLUGIN_TEMPLATE_DIR . 'single.php';
$template_length = strlen( $template_file );
// To determine if we want to override single.php from plugin
// Without this check, WordPress template hierarchy will be broken for single posts, we don't want that
$single_override = $template_length === 0 || substr_compare( $template_file, "single.php", strlen( $template_file ) - 10, 10) === 0;
if( $single_override && file_exists( $custom_single_template ) ) {
$template_file = $custom_single_template;
}
}
return $template_file;
}
add_filter( 'single_template', 'wpse307430_override_single_template', 10, 3 );
このサンプルプラグインファイルをpluginsディレクトリの下のディレクトリ(例:/theme-util/theme-util.php
)内に作成し、プラグインをアクティブにして、このプラグインディレクトリ内のカスタムのsingle.php
テンプレートファイルを/theme-util/single.php
として保存します。
このようにして、このプラグインがアクティブである限り、このプラグインディレクトリ内のsingle.php
テンプレートファイルは、親テーマと子テーマの両方からのsingle.php
テンプレートファイルをオーバーライドします。