如何在插件中添加自定义模板?

时间:2015-11-10 作者:bdtheme

我想为自定义帖子添加自定义模板(\'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>

2 个回复
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

    相关推荐