web-dev-qa-db-ja.com

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

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

add_filter( 'template_include'、 'sermon_template_include'); 
関数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';
 else:
 if(file_exists(TEMPLATEDIR。' /single-wpfc_sermon.php'))
 TEMPLATEDIRを返します。 '/single-wpfc_sermon.php';
はdirname(__ FILE__)を返します。 '/views/single-wpfc_sermon.php';
 endif; 
} 
 return $ template; 
} 

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

_編集_

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

11
Jack

だから、私は正確に何が問題を引き起こしているのかわからないが、あなたは以下を試みるかもしれない:

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

問題が定数を直接参照することからくるのは、possibleです。

6
Chip Bennett

これがあなたのために働くかどうか私にはわかりませんが、それは一撃の価値があります。特別なテンプレートが必要な場合は、カスタム投稿タイプにこれを常に使用します。

// 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');
0
Nicole