web-dev-qa-db-ja.com

カスタムテンプレートをプラグインに追加するにはどうすればいいですか?

カスタム投稿用のカスタムテンプレートを追加したい('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>
1
bdtheme

このプラグインはアクティブなテーマのフォルダから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ページを作成します。これで、通常のテンプレートではなくテンプレートの内容が表示されます。

3
ville6000