カスタム投稿用のカスタムテンプレートを追加したい('post_type' => 'matches'
)。
私はプラグインを書いています。テンプレートをtemplates/fp-fixture-template.php
ファイルに保存します。
これが関数です:
function fixture_template( $template_path ) {
if ( get_post_type() == 'matches' ) {
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 ( 'fp-fixture-template.php' ) ) ) {
$template_path = $theme_file;
} else {
$template_path = plugin_dir_path( FILE )
. 'templates/fp-fixture-template.php';
}
}
}
return $template_path;
}
これがフィルタです。
add_filter( 'template_include', 'fixture_template');
fp-fixture-template.php
ファイルのコード:
<?php
/*Template Name: Matches Template
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Don't allow direct access
?>
<div id="primary">
<div id="content" role="main">
<?php
$mypost = array( 'post_type' => 'matches', );
$loop = new WP_Query( $mypost );
?>
<?php while ( $loop->have_posts() ) : $loop->the_post();?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php endwhile; ?>
</div>
</div>
このプラグインはアクティブなテーマのフォルダからpage_contact.php
を探し、フォールバックとしてプラグインのtemplates/page_contact.php
を使用します。
<?php
/**
* Plugin Name: Test Plugin
*/
add_filter( 'template_include', 'contact_page_template', 99 );
function contact_page_template( $template ) {
$file_name = 'page_contact.php';
if ( is_page( 'contact' ) ) {
if ( locate_template( $file_name ) ) {
$template = locate_template( $file_name );
} else {
// Template not found in theme's folder, use plugin's template as a fallback
$template = dirname( __FILE__ ) . '/templates/' . $file_name;
}
}
return $template;
}
Pluginsフォルダに "Contact"ページを作成し、次にtemplates/page_contact.php
ページを作成します。これで、通常のテンプレートではなくテンプレートの内容が表示されます。