Utiliser template_include avec des types de publication personnalisés

11

Je souhaite rechercher un modèle approprié dans le dossier de thème avant de revenir au fichier dans mon répertoire de plugins. Voici mon code:

add_filter ('template_include', 'sermon_template_include');
fonction 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'))
              retourner TEMPLATEDIR. '/archive-wpfc_sermon.php';
           retour dirname (__ FILE__). '/views/archive-wpfc_sermon.php';
        autre :
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              retourner TEMPLATEDIR. '/single-wpfc_sermon.php';
           retour dirname (__ FILE__). '/views/single-wpfc_sermon.php';
        fin si;
    }
    return $ template;
}

Le problème, c'est que ça ne marche pas! :-) Il sélectionne toujours le fichier dans mon dossier de plugins. Une idée de quoi faire? J'ai essayé beaucoup de variations mais je n'arrive pas à faire fonctionner quoi que ce soit! Merci d'avance! Jack

ÉDITER

Je m'attends à ce que l'archive-wpfc_sermon.php soit renvoyée du dossier de thème s'il existe. Cependant, le fichier de mon plugin est toujours retourné. Merci de votre aide! Ceci provient de mon plugin Sermon Manager disponible dans le référentiel.

Jack
la source
Quel fichier de modèle de thème est renvoyé, alors que vous vous attendez à ce que votre fichier de modèle de plug-in soit renvoyé?
Chip Bennett
Je m'attends à ce que l'archive-wpfc_sermon.php soit renvoyée du dossier de thème s'il existe. Cependant, le fichier de mon plugin est toujours retourné. Merci pour votre aide @ChipBennett! Ceci provient de mon plugin Sermon Manager disponible dans le référentiel.
Jack

Réponses:

6

Donc, je ne sais pas exactement ce qui cause le problème, mais vous pouvez essayer ce qui suit:

  1. Chemin du fichier du plugin : remplacer dirname(__FILE__)parplugin_dir_path( __FILE__ )
  2. Chemin du fichier de thème : remplacer TEMPLATEDIRparget_stylesheet_directory()

Il est possible que le problème provienne du référencement direct des constantes.

Chip Bennett
la source
0

Je ne sais pas si cela fonctionnera pour vous mais ça vaut le coup. Je l'utilise tout le temps pour mes types de messages personnalisés lorsqu'ils nécessitent un modèle spécial.

// 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;
      }
    }
}

Tout ce que vous avez à faire est d'ajouter ce script dans votre fichier functions.php et de placer le fichier modèle dans votre répertoire de thème.

Cela pourrait valoir le coup et ne pas provoquer de conflit avec votre plugin. Mais je n'en suis pas sûr.

J'ai oublié ... n'oubliez pas d'ajouter l'action. :)

add_action("template_redirect", 'my_template_redirect');
Nicole
la source
Merci @Nicole, le code que j'ai publié fonctionne très bien pour appeler mon fichier de modèle. Cependant, je veux scanner le dossier de thème actuel pour un fichier du même nom avant de charger celui dans mon dossier de plugin.
Jack
@Jack, Donc, en gros, il appelle votre fichier depuis le répertoire du plugin avant le modèle dans le répertoire du thème pour le moment? hmm va devoir réfléchir à celui-ci. : DI aime un bon défi!
Nicole
C'est vrai! Cela m'a vraiment dérouté.
Jack
@ Jack, cela peut sembler une question stupide, alors pardonnez-moi si c'est le cas. :) Le code que vous avez publié est celui du plugin ou celui du fichier functions.php?
Nicole
@Jack Le code ci-dessus récupère le fichier modèle de votre répertoire de thème. Vous pouvez utiliser une instruction if pour vérifier si le «include» a fonctionné, et sinon, essayez de récupérer le modèle à partir du répertoire du plug-in.
Stephen Harris