カスタム投稿タイプでtemplate_includeを使用する


11

プラグインディレクトリのファイルにフォールバックする前に、テーマフォルダーで適切なテンプレートを確認したいのですが。これが私のコードです:

add_filter( 'template_include'、 'sermon_template_include');
function sermon_template_include($ template){
    if(get_query_var( 'post_type')== 'wpfc_sermon'){
        if(is_archive()|| is_search()):
           if(file_exists(TEMPLATEDIR。 '/archive-wpfc_sermon.php'))
              TEMPLATEDIRを返します。'/archive-wpfc_sermon.php';
           dirname(__ FILE__)を返します。'/views/archive-wpfc_sermon.php';
        そうしないと :
           if(file_exists(TEMPLATEDIR。 '/single-wpfc_sermon.php'))
              TEMPLATEDIRを返します。'/single-wpfc_sermon.php';
           dirname(__ FILE__)を返します。'/views/single-wpfc_sermon.php';
        endif;
    }
    $ templateを返します。
}

問題は、それが機能しないことです!:-)それは常に私のプラグインフォルダ内のファイルを選びます。どうすればいいですか?多くのバリエーションを試しましたが、何も動作しないようです。前もって感謝します!ジャック

編集

テーマフォルダーが存在する場合、archive-wpfc_sermon.phpがテーマフォルダーから返されることを期待しています。ただし、私のプラグインからのファイルは常に返されます。ご協力いただきありがとうございます!これは、リポジトリで入手可能なSermon Managerプラグインからのものです。


代わりにプラグインテンプレートファイルが返されることを期待している場合、どのテーマテンプレートファイルが返されますか?
チップベネット

テーマフォルダーが存在する場合、archive-wpfc_sermon.phpがテーマフォルダーから返されることを期待しています。ただし、私のプラグインからのファイルは常に返されます。ご協力ありがとうございます@ChipBennett!これは、リポジトリで入手可能なSermon Managerプラグインからのものです。
ジャック

回答:


6

だから、私は問題の原因が正確にわかりませんが、次のことを試してみてください:

  1. ファイルのパスをプラグイン:置き換えるdirname(__FILE__)plugin_dir_path( __FILE__ )
  2. テーマファイルのパス:置き換えるTEMPLATEDIRget_stylesheet_directory()

それはだ可能性の問題は直接の定数を参照するから来ています。


0

これでうまくいくかどうかはわかりませんが、試してみる価値はあります。特別なテンプレートが必要な場合、これを私のカスタム投稿タイプに常に使用します。

// Template selection Defines the template for the custom post types.
function my_template_redirect()
  {
  global $wp;
  global $wp_query;
  if ($wp->query_vars["post_type"] == "your_custom_post_type")
  {
    // Let's look for the your_custom_post_type_template.php template 
   // file in the current theme
    if (have_posts())
      {
          include(TEMPLATEPATH . '/your_custom_post_type_template.php');
          die();
      }
      else
      {
          $wp_query->is_404 = true;
      }
    }
}

このスクリプトをfunctions.phpファイルに追加し、テンプレートファイルをテーマディレクトリに配置するだけです。

これは一見の価値があり、プラグインとの競合を引き起こさないかもしれません。しかし、それはよくわかりません。

私は忘れました...アクションを追加することを忘れないでください。:)

add_action("template_redirect", 'my_template_redirect');

@Nicoleに感謝します。私が投稿したコードは、テンプレートファイルを呼び出すのに最適です。ただし、プラグインフォルダーに読み込む前に、現在のテーマフォルダーで同じ名前のファイルをスキャンしたいと思います。
ジャック

@ジャック、それで基本的にそれは現時点でテーマディレクトリのテンプレートの前にプラグインディレクトリからあなたのファイルを呼び出すのですか?うーん、これをもう1つ考える必要があります。:DIは良い挑戦が大好きです!
ニコル

そのとおり!それは本当に私を困らせました。
ジャック、

@ジャック、これは馬鹿げた質問のように聞こえるかもしれないので、もしそうなら私を許してください。:)あなたが投稿したコードは、プラグイン内のものか、またはfunctions.phpファイル内のものですか?
ニコル

@Jack上記のコードは、テーマディレクトリからテンプレートファイルを取得します。ifステートメントを使用して、 'include'が機能したかどうかを確認し、機能しなかった場合は、プラグインディレクトリからテンプレートを取得することができます。
スティーブンハリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.