Use template_include com tipos de post personalizados

11

Eu quero verificar um modelo apropriado na pasta do tema antes de voltar ao arquivo no diretório do meu plugin. Aqui está o meu código:

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

O problema é que não funciona! :-) Ele sempre escolhe o arquivo na minha pasta de plugins. alguma ideia do que fazer? Eu tentei muitas variações, mas parece que não consigo fazer nada funcionar! Desde já, obrigado! Jack

EDITAR

Estou esperando que o arquivo-wpfc_sermon.php seja retornado da pasta do tema, se existir. No entanto, o arquivo do meu plugin sempre é retornado. Obrigado pela ajuda! Isto é do meu plugin Sermon Manager disponível no repositório.

    
por Jack 28.10.2011 / 07:31

2 respostas

6

Não sei exatamente o que está causando o problema, mas você pode tentar o seguinte:

  1. Caminho do arquivo de plug-in : substitua dirname(__FILE__) por plugin_dir_path( __FILE__ )
  2. Caminho do arquivo de tema : substitua TEMPLATEDIR por get_stylesheet_directory()

É possível que o problema vem referenciando as constantes diretamente.

    
por Chip Bennett 28.10.2011 / 18:08
0

Não tenho certeza se isso funcionará para você, mas vale a pena tentar. Eu uso isso o tempo todo para meus tipos de postagem personalizados quando eles exigem um modelo especial.

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

Tudo o que você precisa fazer é adicionar esse script ao arquivo functions.php e colocar o arquivo de modelo no diretório do seu tema.

Isso pode valer a pena e não pode causar conflito com seu plug-in. No entanto, não tenho certeza disso.

Eu esqueci ... não se esqueça de adicionar a ação. :)

add_action("template_redirect", 'my_template_redirect');
    
por Nicole 28.10.2011 / 17:28