¿Hay alguna forma de usar get_template_part () con carpetas?

Respuestas:

40

De hecho, puede, tengo una carpeta en mi directorio de temas llamada /partials/en esa carpeta Tengo archivos como latest-articles.php, latest-news.phpy latest-statements.phpcargo estos archivos usando get_template_part()como:

get_template_part('partials/latest', 'news');

get_template_part('partials/latest', 'articles');

get_template_part('partials/latest', 'statements');

Simplemente no olvide omitir el .phpnombre del archivo.

Ahmad M
fuente
¡Gracias! Es tan simple que es una pena que no descubrí esto. Estaba convencido de que esto no es posible porque el Codex no menciona eso. Esta pregunta trajo respuestas más interesantes, pero esta es la más simple, por lo que probablemente sea la más útil para la persona promedio :) (así que déjelo marcado con una marca verde).
Paul
1
Afortunadamente, es posible editar el Codex para que la siguiente persona no tenga el mismo problema. :-)
Dalton
@Sebastien En realidad puedes ex: <?php get_template_part('partials/file'); ?>
HauntedSmores
5

Me temo que no. Si en codex no es algo que le gustaría saber, intente seguir el enlace a la fuente y eche un vistazo al código e intente administrarlo.

Eché un vistazo y la función get_template_part se define a continuación:

function get_template_part( $slug, $name = null ) {
    do_action( "get_template_part_{$slug}", $slug, $name );

    $templates = array();
    if ( isset($name) )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php";

    locate_template($templates, true, false);
}

De esto, puede leer, que la función get_template_part solo crea un nombre de archivo php deseado y llama a la función location_template. Esto no es útil, así que también eché un vistazo a la función Locate_template:

function locate_template($template_names, $load = false, $require_once = true ) {
    $located = '';
    foreach ( (array) $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
            $located = STYLESHEETPATH . '/' . $template_name;
            break;
        } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        }
    }

    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Obtenga búsquedas de plantillas de localización para el archivo php llamado desde get_template_part. Pero puede llamar a Locate_template directamente desde su código. Y esto es útil.

Pruebe este código en lugar de la función get_template_part ('loop-sigle.php') (su archivo se encuentra en mydir dentro de su tema):

locate_template( 'mydir/loop-single.php', true, true );
david.binda
fuente
Atajo interesante, me pregunto si tiene alguna consecuencia negativa sobre la secuencia de carga o el contenido del archivo.
lowtechsun
2

Las notas de función get_template_part()dicen:

Notas
- Usos: Locate_template ()
- Usos: do_action () Llama a la acción 'get_template_part _ {$ slug}'.

Que le permite hacer uso locate_template(), que dice:

Las búsquedas en STYLESHEETPATH ​​antes de TEMPLATEPATH para que los temas que heredan de un tema principal puedan sobrecargar un archivo.

Si define TEMPLATEPATHcon el subdirectorio que desea utilizar, get_template_part()buscará los archivos en su subdirectorio.

Mike Madern
fuente