Existe alguma maneira de usar get_template_part () com pastas?

Respostas:

40

Na verdade, você pode, eu tenho uma pasta no meu diretório de temas chamada /partials/nessa pasta, tenho arquivos como latest-articles.php, latest-news.phpe latest-statements.phpcarrego esses arquivos usando o seguinte get_template_part():

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

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

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

Só não se esqueça de omitir o .phpnome do arquivo.

Ahmad M
fonte
Obrigado! É tão simples que é uma pena não ter descoberto isso. Eu estava convencido de que isso não é possível porque o Codex não menciona isso. Essa pergunta trouxe respostas mais interessantes, mas essa é a mais simples, portanto é provavelmente a mais útil para as pessoas comuns :) (seja marcada com uma marca verde).
Paul
11
Felizmente, é possível editar o Codex para que a próxima pessoa não tenha o mesmo problema. :-)
Dalton
@Sebastien Você pode realmente ex: <?php get_template_part('partials/file'); ?>
HauntedSmores
5

Receio que não. Se no codex não é algo que você gostaria de saber, tente seguir o link para a fonte e dê uma olhada no código e tente gerenciá-lo.

Eu dei uma olhada e a função get_template_part é definida como abaixo:

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

A partir disso, você pode ler que a função get_template_part apenas cria um nome de arquivo php pretendido e chama a função location_template. Isso não é útil, então eu dei uma olhada também na função 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;
}

Obtenha pesquisas de modelos de localização para arquivos php chamados de get_template_part. Mas você pode chamar o location_template diretamente do seu código. E isso é útil.

Experimente este código em vez da função get_template_part ('loop-sigle.php') (seu arquivo está localizado em mydir, dentro do seu tema):

locate_template( 'mydir/loop-single.php', true, true );
david.binda
fonte
Atalho interessante, gostaria de saber se tem alguma conseqüência negativa na sequência de carregamento ou no conteúdo do arquivo.
Lowtechsun # 30/17
2

As notas de função get_template_part()dizem:

Notas
- Usa: find_template ()
- Usa: do_action () Chama a ação 'get_template_part _ {$ slug}'.

O que permite fazer uso locate_template(), o que diz:

Procura no STYLESHEETPATH ​​antes de TEMPLATEPATH para que os temas herdados de um tema pai possam sobrecarregar apenas um arquivo.

Se você definir TEMPLATEPATHcom o subdiretório que deseja usar, get_template_part()procurará os arquivos em seu subdiretório.

Mike Madern
fonte