web-dev-qa-db-ja.com

プラグインとテンプレートのカスタム分類

私が開発しているプラ​​グインは、カスタムの投稿タイプと分類法を使用しています。私の質問はこれです。分類法のカスタムURLに移動したときに、プラグインからコンテンツ/テーマデータをページにロードする方法を教えてください。

編集

カスタム分類用のテーマではなく、プラグインのテンプレートファイルを使用しようとしています。

4
brenjt

まず第一に - プラグインはコンテンツを生成するためのもので、テーマはそれを表示するためのものです。だから、本当に、プラグインはこれをするべきではありません。しかし、灰色の領域があります - 例えば、「イベント」関連のプラグインでは、日付、開催地などを表示することが望ましいでしょう - 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;
}

私はプラグインの中でこのメソッドを使用しました - あなたは上記の実用的な例を見ることができます ここ

7
Stephen Harris

これが、私のテーマフォルダ内のサブディレクトリから分類テンプレートを呼び出す方法です。 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にあります。

1
MikeT