これはとても単純な質問のようです。私はsub-page.phpやpage-child.phpのようなものを探しています。そこでは私のテーマの子ページでいくつかの異なることができます。
それらはデザインと内容において十分に異なっているので、私はすべての汚い仕事をするために私は多くのphpかCSS .page-childクラスを使わなければなりません。もっと簡単な方法を探しています。
注意点 - これは自動的に行われるので、クライアントに「サブページを作成するときは必ず「サブページ」テンプレートを必ず選択してください」と伝える必要はありません。これは不安定です。
子ページ専用のテンプレートはありませんが、 get_template_part() 関数を使用すると、これを簡単に実行できます。
最初に "content-child.php"というファイルを作成してください。
次に "content.php"というファイルを作ります。
次に、page.phpの中に、これを配置します。
if( $post->post_parent !== 0 ) {
get_template_part('content', 'child');
} else {
get_template_part('content');
}
子ページに表示したいものはすべてcontent-child.phpの内側に配置されます。子ページ以外に表示したいものはすべてcontent.phpに配置されます。
それは実際には非常に簡単です、あなたのfunctions.php
にフォローコードを追加してください
add_filter(
'page_template',
function ($template) {
global $post;
if ($post->post_parent) {
// get top level parent page
$parent = get_post(
reset(array_reverse(get_post_ancestors($post->ID)))
);
// or ...
// when you need closest parent post instead
// $parent = get_post($post->post_parent);
$child_template = locate_template(
[
$parent->post_name . '/page-' . $post->post_name . '.php',
$parent->post_name . '/page-' . $post->ID . '.php',
$parent->post_name . '/page.php',
]
);
if ($child_template) return $child_template;
}
return $template;
}
);
その後、以下のパターンでテンプレートを準備することができます。
[parent-page-slug]/page.php
[parent-page-slug]/page-[child-page-slug].php
[parent-page-slug]/page-[child-post-id].php
上記のOzzyCzechのソリューションを修正したものです。この関数は、テーマのルートディレクトリで、名前が親のスラッグまたは親のIDを含むファイルを探します。
/theme_root/child-PARENT_SLUG.php
/theme_root/child-PARENT_ID.php
function child_templates($template) {
global $post;
if ($post->post_parent) {
// get top level parent page
$parent = get_post(
reset(array_reverse(get_post_ancestors($post->ID)))
);
// find the child template based on parent's slug or ID
$child_template = locate_template(
[
'child-' . $parent->post_name . '.php',
'child-' . $parent->ID . '.php',
'child.php',
]
);
if ($child_template) return $child_template;
}
return $template;
}
add_filter( 'page_template', 'child_templates' );