Utiliser template_include avec des types de publication personnalisés

11

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

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'))
              return TEMPLATEDIR . '/archive-wpfc_sermon.php';
           return dirname(__FILE__) . '/views/archive-wpfc_sermon.php';
        else :
           if(file_exists(TEMPLATEDIR . '/single-wpfc_sermon.php'))
              return TEMPLATEDIR . '/single-wpfc_sermon.php';
           return dirname(__FILE__) . '/views/single-wpfc_sermon.php';
        endif;
    }
    return $template;
}

Le problème, c’est que ça ne marche pas! :-) Il sélectionne toujours le fichier dans mon dossier de plugin. 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

MODIFIER

J'attends que le fichier archive-wpfc_sermon.php soit renvoyé du dossier du thème s'il existe. Cependant, le fichier de mon plugin est toujours renvoyé. Merci de votre aide! C’est depuis mon plug-in Sermon Manager disponible dans le référentiel.

    
posée Jack 28.10.2011 - 07:31

2 réponses

6

Alors, je ne sais pas exactement ce qui cause le problème, mais vous pouvez essayer les solutions suivantes:

  1. Chemin d'accès au fichier de plugin : remplacez dirname(__FILE__) par plugin_dir_path( __FILE__ ) .
  2. Chemin du fichier de thème : remplacez TEMPLATEDIR par get_stylesheet_directory() .

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

    
réponse donnée Chip Bennett 28.10.2011 - 18:08
0

Je ne sais pas si cela fonctionnera pour vous, mais cela en vaut la peine. J'utilise cela tout le temps pour mes types d'articles 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 de modèle dans votre répertoire de thème.

Cela pourrait valoir le coup et ne pas causer de conflit avec votre plugin. Cependant, je ne suis pas sûr de cela.

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

add_action("template_redirect", 'my_template_redirect');
    
réponse donnée Nicole 28.10.2011 - 17:28

Lire d'autres questions sur les étiquettes