カスタム投稿タイププラグイン:テンプレートはどこに配置しますか?


11

カスタム投稿タイプのプラグインを書いています。その一部は、ショートコードを介してテンプレートに出力しています。しかし、他のパーツにはカスタム投稿テンプレートが必要であり、CPTのテンプレート階層を使用する方法を理解しました。しかし、カスタムテンプレートはテーマに含まれており、プラグインは少なくとも最初から自己完結型である必要があると思います。

ここでのベストプラクティスは何ですか?テンプレートファイルをCPTプラグインに含めるにはどうすればよいですか?これがどのように行われるかについて、特に良い例を教えてもらえますか?

ご協力いただきありがとうございます。



1
重複しているかどうかはわかりませんが、主観的な質問です。私にとってのベストプラクティスは、テーマにそれを処理させることです。他の人にとってのベストプラクティスは、プラグインを完全に自己完結させることです。
chrisguitarguy 2013

@JohannesPille質問する前に検索しました。しかしリンクをありがとう。調べてみます。
NotoriousWebmaster 2013

1
@chrisguitarguy同意します。テーマを処理させる私の問題は、テーマを切り替える場合、プラグインに対応するためにカスタマイズを行う必要があることです。そうでなければ、CPTがパーティーにもたらすものを失います。
NotoriousWebmaster 2013

回答:


8

ここでのベストプラクティスは何ですか?

私はテーマにそれを処理させることとプラグインでデフォルトを提供することの組み合わせを言うでしょう。

single_templateフィルターを使用して、テンプレートを切り替えることができます。コールバックで、テーマが投稿タイプのテンプレートを提供したかどうかを確認し、提供した場合は何もしません。

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

私はこの方法が一番好きです。「テンプレートタグ」のサウンドセットを提供するとそれを組み合わせる(例えばthe_contentthe_title)あなたには、いくつかの音のデフォルト値とともに、エンドユーザーにカスタマイズ電力の多くを与えるものは何でもカスタムあなたのポストタイプと一緒に行くのデータを、そのサポート。Bbpressはこの種のことを非常にうまく行っています。ユーザーテンプレートが見つかった場合は、それを含めて、多数のテンプレートタグを提供します。

または、the_contentフィルター付きのコールバックを使用して、コンテンツ自体の内容を変更することもできます。

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}

私は@toschoに同意し、クリーンな解決策はありません。しかし、私は一連のカテゴリタグを提供するコンセプトが好きです。最終的には、サンプルのCPTテンプレートを使用して、プラグインにテーマフォルダーを配置し、ユーザーに状況に合わせてそれを適用することをお勧めします。また、the_contentフィルターも気に入っています。これは、ユーザーのレイアウト内にコンテンツを挿入するためです。両方を実装して、ユーザーがオプションの切り替えでどちらの方法に進むかを選択できるようにすることができます。
NotoriousWebmaster 2013

3

template_includeリクエストが投稿タイプの場合、プラグインファイルにフックして返すことができます。

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

しかし、これは外観を大幅に変更します。まだきれいな解決策はありません。


ええ、あなたは正しいです、それはレイアウトやウィジェットなどを含む外観を変更します。私の好みには過激すぎる。しかし、ありがとう。
NotoriousWebmaster 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.