Use template_include com tipos de postagem personalizados

11

Quero procurar um modelo apropriado na pasta do tema antes de retornar ao arquivo no diretório do meu plugin. Aqui está o meu código:

add_filter ('template_include', 'sermon_template_include');
função 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'))
              retornar TEMPLATEDIR. '/archive-wpfc_sermon.php';
           retornar dirname (__ FILE__). '/views/archive-wpfc_sermon.php';
        outro :
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              retornar TEMPLATEDIR. '/single-wpfc_sermon.php';
           retornar dirname (__ FILE__). '/views/single-wpfc_sermon.php';
        fim se;
    }
    retornar $ 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 não consigo fazer nada funcionar! Desde já, obrigado! Jack

EDITAR

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

Jack
fonte
Qual arquivo de modelo de tema está sendo retornado, quando você espera que o arquivo de modelo de plug-in seja retornado?
Chip Bennett
Estou esperando que o archive-wpfc_sermon.php seja retornado da pasta do tema, se existir. No entanto, o arquivo do meu plugin sempre é retornado. Obrigado pela sua ajuda @ChipBennett! Isso é do meu plug-in do Sermon Manager disponível no repositório.
28411 Jack

Respostas:

6

Portanto, 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__)porplugin_dir_path( __FILE__ )
  2. Caminho do arquivo de tema : substitua TEMPLATEDIRporget_stylesheet_directory()

É possível que o problema venha da referência direta às constantes.

Chip Bennett
fonte
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 seu arquivo functions.php e colocar o arquivo de modelo no diretório do tema.

Isso pode valer a pena tentar e pode não causar conflito com seu plugin. 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');
Nicole
fonte
Obrigado @Nicole, o código que publiquei funciona muito bem para chamar meu arquivo de modelo. No entanto, desejo procurar na pasta de temas atual um arquivo com o mesmo nome antes de carregá-lo na minha pasta de plugins.
28411 Jack
@ Jack, Então, basicamente, chamando seu arquivo do diretório do plugin antes do modelo no diretório do tema no momento? hmm vai ter que pensar mais nisso. : Eu amo um bom desafio!
28511 Nicole
Está certo! Realmente me deixou perplexo.
28411 Jack
@ Jack, isso pode parecer uma pergunta idiota, então me perdoe se for. :) O código que você postou é o do plugin ou o arquivo functions.php?
28511 Nicole
@Jack O código acima recupera o arquivo de modelo do diretório de temas. Você pode usar uma instrução if para verificar se o 'include' funcionou e, se não, tentar recuperar o modelo do diretório de plug-in.
Stephen Harris