特定のカテゴリに属するWordPress Post用のカスタムテンプレートを作成するための最善の方法(パフォーマンスとコード構造)は何ですか? single-catname.php
を作成することはできません。
これまで、テンプレートを変更する方法を2つ試してみました。しかし、どれが一番良いのでしょうか。
編集:
どのようにすべてのサブ/親などのカテゴリに含める方法はありますか?私は今それが唯一の主要なカテゴリを示していることに気づきました...
1. functions.phpに追加
function get_custom_cat_template($single_template) {
global $post;
if ( in_category( 'movies' )) {
$single_template = dirname( __FILE__ ) . '/single-movies.php';
}
return $single_template;
}
add_filter( "single_template", "get_custom_cat_template" ) ;
2. (他のすべてのコードではなく)次のコードをsingle.phpに追加し、(single.phpからのコードを使用して)single-template.php
を作成し、custom single-movies.php
を作成します。
<?php
if(has_term('movies', 'category', $post)) {
get_template_part('single-movies', 'movies');
} else {
// use default template file single-template.php
get_template_part('single-template');
}
?>
私のコメントからOPへ
私の意見では、あなたが快適であるものを使用してください。パフォーマンスに違いがある場合、それは分/無関係になります。私の好みは、フィルタを使う
私の意見では、あなたの本当の関心事/質問に来るために、最善のアプローチは親カテゴリーIDを使用してそこから作業することでしょう。ここから作業するのが最もリソース集約的になります。リバースエンジニアリングは、非常に不要なリソースの浪費になる可能性があります。
与えられたカテゴリから子カテゴリを取得するために get_categories
を使用してください。 parent
またはchild_of
のいずれかの2つのパラメーターのいずれかを使用できます。
親 (整数)
そのIDで識別されるカテゴリの直接の子孫であるカテゴリ(つまり、子供のみ)を表示します。これは 'child_of'パラメータのようには動作しません。このパラメータにはデフォルトはありません。 [2.8.4に]
child_of (整数)
そのIDで識別されるカテゴリの子孫(つまり子供と孫)であるすべてのカテゴリを表示します。このパラメータにはデフォルトはありません。このパラメータを使用すると、hide_emptyパラメータはfalseに設定されます。
これらを取得したら、 wp_list_pluck
を使用して、返されたカテゴリの配列からcatID、name、またはslugフィールドを取得します。この配列は、投稿がこれらのカテゴリのいずれかに属しているかどうかを確認するために使用されます。 has_category
または in_category
のいずれかを使用できます。
これは、親カテゴリまたはその子孫に属する投稿が特定のテンプレートを使用するようにコードを拡張する方法です。
add_filter( 'single_template', function ( $single_template ) {
$parent = '21'; //Change to your category ID
$categories = get_categories( 'child_of=' . $parent );
$cat_names = wp_list_pluck( $categories, 'name' );
if ( has_category( 'movies' ) || has_category( $cat_names ) ) {
$single_template = dirname( __FILE__ ) . '/single-movies.php';
}
return $single_template;
}, PHP_INT_MAX, 2 );
ステップ1:content-single.phpを作成またはコピーして新しいファイルを作成します。例:content-yourCategory.phpステップ2:single.phpを開き、このget_template_part('content','single');
を次のコードに置き換えます。
if(is_category('yourCategory')){
get_template_part('content','yourCategory');
}else{
get_template_part('content','single.php');
}
パラメータは、カテゴリID、カテゴリタイトル、カテゴリスラッグ、またはIDの配列、名前、およびスラッグです。
これはそのための便利な方法で、 here がこのコードを過ぎてfunction.php
になります。
// Custom single template by category
// https://halgatewood.com/wordpress-custom-single-templates-by-category
add_filter('single_template', 'check_for_category_single_template');
function check_for_category_single_template( $t )
{
foreach( (array) get_the_category() as $cat )
{
if ( file_exists(STYLESHEETPATH . "/single-category-{$cat->slug}.php") ) return STYLESHEETPATH . "/single-category-{$cat->slug}.php";
if($cat->parent)
{
$cat = get_the_category_by_ID( $cat->parent );
if ( file_exists(STYLESHEETPATH . "/single-category-{$cat->slug}.php") ) return STYLESHEETPATH . "/single-category-{$cat->slug}.php";
}
}
return $t;
}
詳細については、チェックアウトする https://halgatewood.com/wordpress-custom-single-templates-by-category