我想为自定义帖子添加自定义模板(\'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>
SO网友:ville6000
此插件查找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;
}
创建“联系人”页面,然后
templates/page_contact.php
在插件文件夹中。现在,您应该看到您的模板内容,而不是普通模板。
SO网友:jnhghy - Alexandru Jantea
对于我的解决方案,首先需要确定要覆盖的模板类型。因此,让我们看一下以下示例:您希望覆盖/自定义自定义帖子类型的单个模板。
首先,在插件中创建自定义文件夹并将模板添加到其中
使用以下方法过滤单个模板:add_filter( \'single_template\', \'load_custom_template\', 10, 3 );
<添加插件模板
function load_custom_template( $template, $type, $templates ) {
foreach( $templates as $tlp ) {
if ( file_exists( plugin_dir_path(__FILE__) . \'{custom_folder}/\' . $tlp ) ) {
$template = plugin_dir_path(__FILE__) . \'{custom_folder}/\' . $tlp;
}
}
return $template;
}
*对于不同类型的模板,将挂钩更改为
$type_template
有关挂钩的更多信息here