Use template_include con tipos de publicación personalizados

11

Quiero buscar una plantilla adecuada en la carpeta del tema antes de volver al archivo en mi directorio de complementos. Aquí está mi código:

add_filter ('template_include', 'sermon_template_include');
función 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'))
              volver TEMPLATEDIR. '/archive-wpfc_sermon.php';
           regresar dirname (__ ARCHIVO__). '/views/archive-wpfc_sermon.php';
        más:
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              volver TEMPLATEDIR. '/single-wpfc_sermon.php';
           regresar dirname (__ ARCHIVO__). '/views/single-wpfc_sermon.php';
        terminara si;
    }
    devolver $ plantilla;
}

El problema es que no funciona. :-) Siempre selecciona el archivo en mi carpeta de complementos. ¿Alguna idea de qué hacer? He intentado muchas variaciones, ¡pero parece que no puedo hacer que nada funcione! ¡Gracias por adelantado! Jack

EDITAR

Espero que archive-wpfc_sermon.php sea devuelto desde la carpeta del tema si existe. Sin embargo, el archivo de mi complemento siempre se devuelve. ¡Gracias por tu ayuda! Esto es de mi complemento Sermon Manager disponible en el repositorio.

Jack
fuente
¿Qué archivo de plantilla de tema se devuelve, cuando en cambio espera que se devuelva su archivo de plantilla de complemento?
Chip Bennett
Espero que archive-wpfc_sermon.php sea devuelto desde la carpeta del tema si existe. Sin embargo, el archivo de mi complemento siempre se devuelve. Gracias por tu ayuda @ChipBennett! Esto es de mi complemento Sermon Manager disponible en el repositorio.
Jack

Respuestas:

6

Entonces, no estoy seguro exactamente de qué está causando el problema, pero puede intentar lo siguiente:

  1. Ruta del archivo del complemento : reemplazar dirname(__FILE__)conplugin_dir_path( __FILE__ )
  2. Ruta del archivo de tema : reemplazar TEMPLATEDIRconget_stylesheet_directory()

Es posible que el problema provenga de hacer referencia a las constantes directamente.

Chip Bennett
fuente
0

No estoy seguro de si esto funcionará para usted, pero vale la pena intentarlo. Lo uso todo el tiempo para mis tipos de publicaciones personalizadas cuando requieren una plantilla 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;
      }
    }
}

Todo lo que tiene que hacer es agregar este script en su archivo functions.php y colocar el archivo de plantilla en su directorio de temas.

Podría valer la pena intentarlo y no puede causar conflictos con su complemento. Sin embargo, no estoy seguro de eso.

Olvidé ... no olvides agregar la acción. :)

add_action("template_redirect", 'my_template_redirect');
Nicole
fuente
Gracias @Nicole, el código que publiqué funciona muy bien para llamar a mi archivo de plantilla. Sin embargo, quiero escanear la carpeta del tema actual en busca de un archivo con el mismo nombre antes de cargar el que está en mi carpeta de complementos.
Jack
@Jack, ¿Entonces básicamente está llamando a su archivo desde el directorio de complementos antes de la plantilla en el directorio de temas en este momento? hmm tendré que pensarlo más. : DI amo un buen desafío!
Nicole
¡Así es! Realmente me dejó perplejo.
Jack
@ Jack, esto puede sonar como una pregunta tonta, así que perdóname si es así. :) El código que ha publicado es el que está en el complemento o está en el archivo functions.php?
Nicole
@Jack El código anterior recupera el archivo de plantilla de su directorio de temas. Puede usar una instrucción if para verificar si la 'inclusión' funcionó, y si no, intente recuperar la plantilla del directorio de complementos.
Stephen Harris