IDに基づいてページテンプレートを設定する方法私のサイトにはRedux Frameworkがインストールされていますが、登録ページを設定することもできます。このページでは、特定のテンプレートを使用したいのですが、他のテンプレートではデフォルトのテンプレートを使用する必要があります。
私はそれで半分働いていました
add_filter( 'page_template', 'my_function' );
function my_function(){
global $my_options;
$page_id = get_queried_object_id();
if ( $my_options['my-reg-page'] == $page_id ) {
return get_template_directory() . '/reg-page.php';
}
}
問題のページ(IDが$my_options['my-reg-page']
に格納されているページ)にはページセットがありますが、残りのページにはindex.phpをテンプレートとして使用し、適切なページ(single.php、page.phpなど)は使用しません。条件をフィルタの外側に設定した場合、探しているテンプレートは表示されません。必要に応じて関連ページとして異なるページを使用することになる複数のテーマで使用するためにコードを自分のfunctions.phpファイルに貼り付けるのではなく、メタデータを保存しないようにします。最も簡単な方法は管理領域のページに直接テーマを設定することですが、それはそのまま複数のオプションを作成します。私はそれらを可能な限り減らすことを望んでいます。
何かアドバイス?それも可能ですか?
私が開発していたプラグインの1つに対して、非常によく似たことをする必要がありました。私はプラグインのアクティベーション中に2つの別々のcptを登録しました、そしてそれらのそれぞれのcptは私がプラグインコードベースにバンドルしたカスタムの単一テンプレートを使うべきです。
page_template フィルタを使用して、ページテンプレートに対しても同じことができるはずです。
これがsingle_templateフィルタを使った私の関数です。これは代わりにpage_templateを使うように調整できます。グローバルな$ post変数を取得するだけで、投稿の種類や投稿IDを確認して、そのデータに基づいてテンプレートを配信できます。
add_filter( 'page_template', 'custom_page_template' );
public function custom_page_template( $page_template ) {
global $post;
switch ( $post->ID) {
default :
case '2' : // page ID 2
if( file_exists( get_stylesheet_directory() . '/single-event-template.php' ) ) {
$page_template = get_stylesheet_directory() . '/single-event-template.php';
return $single_template;
break;
case '14' : // page ID 14
$page_template= plugin_dir_path( dirname( __FILE__ ) ) . 'public/partials/single-event-location-template.php';
return $page_template;
break;
} // end switch
}
ページテンプレートを使ってこれをテストしたことはありませんが、コーデックスページからはうまくいくようです。
あなたの例から手を加えて、あなたは以下のような何かを試みたがっているかもしれません:
add_filter( 'page_template', 'my_function' );
function my_function( $page_template ){
global $post;
$page_id = $post->ID;
if ( $my_options['my-reg-page'] == $page_id ) {
$page_template = get_template_directory() . '/reg-page.php';
} else {
$page_template = get_template_directory() . '/some-other-page-template.php';
}
return $page_template;
}