Use template_include con tipos de publicación personalizados

11

Quiero buscar una plantilla adecuada en la carpeta de temas antes de volver al archivo en mi directorio de complementos. Aquí está mi 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;
}

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

EDIT

Estoy esperando que el archivo-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 de Sermon Manager disponible en el repositorio.

    
pregunta Jack 28.10.2011 - 07:31

2 respuestas

6

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

  1. Ruta del archivo del complemento : reemplace dirname(__FILE__) con plugin_dir_path( __FILE__ )
  2. Ruta del archivo de tema : reemplaza TEMPLATEDIR con get_stylesheet_directory()

Es posible que el problema se deba a la referencia directa a las constantes.

    
respondido por el Chip Bennett 28.10.2011 - 18:08
0

No estoy seguro de que esto funcione, 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.

Esto podría valer la pena y no causar conflicto con su complemento. Sin embargo, no estoy seguro de eso.

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

add_action("template_redirect", 'my_template_redirect');
    
respondido por el Nicole 28.10.2011 - 17:28

Lea otras preguntas en las etiquetas