私が開発しているプラグインは、カスタムの投稿タイプと分類法を使用しています。私の質問はこれです。分類法のカスタムURLに移動したときに、プラグインからコンテンツ/テーマデータをページにロードする方法を教えてください。
編集
カスタム分類用のテーマではなく、プラグインのテンプレートファイルを使用しようとしています。
まず第一に - プラグインはコンテンツを生成するためのもので、テーマはそれを表示するためのものです。だから、本当に、プラグインはこれをするべきではありません。しかし、灰色の領域があります - 例えば、「イベント」関連のプラグインでは、日付、開催地などを表示することが望ましいでしょう - WordPressテーマは通常表示されません。
私はお勧めします
使用されているテンプレートを変更するには、template_include
フィルタを使用できます。これは分類テンプレートの例ですが、カスタム投稿タイプでも同様の処理が可能です。
add_filter('template_include', 'wpse50201_set_template');
function wpse50201_set_template( $template ){
//Add option for plugin to turn this off? If so just return $template
//Check if the taxonomy is being viewed
//Suggested: check also if the current template is 'suitable'
if( is_tax('event-venue') && !wpse50201_is_template($template))
$template = plugin_dir_url(__FILE__ ).'templates/taxonomy-event-venue.php';
return $template;
}
注これは、プラグインテンプレートが現在のdirectorに対するテンプレートサブフォルダにあることを前提としています。
これは単に「イベント開催地」分類が見られていることをチェックするだけです。そうでない場合は、元のテンプレートが使用されます。
wpse50201_is_template
関数は、WordPressがtheme/child-themeから選んだテンプレートがtaxonomy-event-venue.php
またはtaxonomy-event-venue-{term-slug}.php
であるかどうかをチェックします。もしそうなら - 元のテンプレートが使用されます。
これにより、あなたのプラグインのユーザはそれらを自分のテーマにコピーして編集することができ、プラグインはテーマ/子テーマのテンプレートを優先させます。見つからない場合にのみ、プラグインテンプレートにフォールバックします。
function wpse50201_is_template( $template_path ){
//Get template name
$template = basename($template_path);
//Check if template is taxonomy-event-venue.php
//Check if template is taxonomy-event-venue-{term-slug}.php
if( 1 == preg_match('/^taxonomy-event-venue((-(\S*))?).php/',$template) )
return true;
return false;
}
私はプラグインの中でこのメソッドを使用しました - あなたは上記の実用的な例を見ることができます ここ 。
これが、私のテーマフォルダ内のサブディレクトリから分類テンプレートを呼び出す方法です。 taxonomy.php
はあなたのルートテーマディレクトリにとどまる必要があることを覚えておいてください。
function call_taxonomy_template_from_directory(){
global $post;
$taxonomy_slug = get_query_var('taxonomy');
load_template(get_template_directory() . "/templates-taxonomy/taxonomy-$taxonomy_slug.php");
}
add_filter('taxonomy_template', 'call_taxonomy_template_from_directory');
たとえば、私の分類法は 'news-category'と呼ばれています。テンプレートはwp-content/themes/mytheme/templates-taxonomy/taxonomy-news-category.php
にあります。