私はカスタム投稿タイプに関するかなり古いチュートリアルに従っています、そして最後のステップはカスタムページテンプレートを作成することです。コメントによれば、6年後に使用された方法はもはや機能しなくなり(図を参照)、私のカスタムページテンプレートは新しいページを作成するときのオプションにはなりません。
カスタムフォルダをテーマフォルダに置いてもうまくいきますが、プラグインディレクトリから読み込むというオプションが壊れています。テンプレートを新しいページに割り当てるためにこれを修正するにはどうすればよいですか。
編集
私が今よりよく理解しているように、このコードは only 私のカスタム投稿タイプを表示するときのテンプレートのロードです。混乱はそれがThemesディレクトリに配置されたときにそれが "ページ属性"セクションで利用可能なテンプレートとして表示されていたことが原因でした。新しいページを作成するときにオプションとして利用できるようにしたいのですが、テンプレートファイルを自分のプラグインのディレクトリに配置します。
チュートリアルの元のコード:
add_filter( 'template_include', 'include_template_function', 1 );
function include_template_function( $template_path ) {
if ( get_post_type() == 'movie_reviews' ) {
if ( is_single() ) {
// checks if the file exists in the theme first,
// otherwise serve the file from the plugin
if ( $theme_file = locate_template( array ( 'single-movie_reviews.php' ) ) ) {
$template_path = $theme_file;
} else {
$template_path = plugin_dir_path( __FILE__ ) . '/single-movie_reviews.php';
}
}
}
return $template_path;
}
ページ属性テンプレートセクションにカスタムテンプレートを追加するには、最初にドロップダウンにテンプレートを追加し、現在のページが現在のテンプレートとして選択したときにそれをtemplate_include
フックに読み込む必要があります。
/**
* Add "Custom" template to page attirbute template section.
*/
function wpse_288589_add_template_to_select( $post_templates, $wp_theme, $post, $post_type ) {
// Add custom template named template-custom.php to select dropdown
$post_templates['template-custom.php'] = __('Custom');
return $post_templates;
}
add_filter( 'theme_page_templates', 'wpse_288589_add_template_to_select', 10, 4 );
/**
* Check if current page has our custom template. Try to load
* template from theme directory and if not exist load it
* from root plugin directory.
*/
function wpse_288589_load_plugin_template( $template ) {
if( get_page_template_slug() === 'template-custom.php' ) {
if ( $theme_file = locate_template( array( 'template-custom.php' ) ) ) {
$template = $theme_file;
} else {
$template = plugin_dir_path( __FILE__ ) . 'template-custom.php';
}
}
if($template == '') {
throw new \Exception('No template found');
}
return $template;
}
add_filter( 'template_include', 'wpse_288589_load_plugin_template' );
theme_page_templates
フックはpage
投稿タイプに利用可能です。他の投稿タイプにカスタムテンプレートを追加したい場合は、page
をあなたのカスタム投稿タイプ名に置き換えてください。 event
ポストタイプフックはtheme_event_templates
という名前を持ちます。