O content.php e content-single.php são iguais?

4

Entendo que, ao usar get_template_part('content', get_post_format()); , ajudará a escolher post format para uma página específica de acordo com o formato da postagem.

E, se não houver um formato de postagem ", por exemplo, padrão", ele fará o fallback para content.php

Mas e se eu usasse content-single.php com alguma lógica assim:

if (get_post_format() == false) {
    get_template_part('content', 'single');
    } else {
        get_template_part('content', get_post_format());
}

Ainda preciso de content.php page? Existe alguma outra funcionalidade que eu não conheça?

    
por Emad Aldeen 15.09.2016 / 18:31

2 respostas

3

Não, content.php e content-single.php não são a mesma coisa.

No seu código de exemplo:

if (get_post_format() == false) {
    get_template_part('content', 'single');
} else {
    get_template_part('content', get_post_format());
}

O WordPress carregará content-single.php quando get_post_format() for false . No entanto, get_template_part( $slug, $name ) ainda pode tentar carregar content.php quando você o chamar com get_template_part('content', get_post_format()); no exemplo a seguir:

  1. get_post_format() retorna (por exemplo) video .

  2. Mas você não tem content-video.php arquivo de modelo.

Então, basicamente, mesmo quando get_post_format() não for false , content.php ainda fornecerá a parte do modelo padrão se a parte do modelo relacionado ao formato de postagem correspondente não tiver sido criada.

  

Linha de fundo: qualquer que seja o% principal $slug , é sempre uma boa ideia manter o arquivo de peça do modelo padrão como a parte final do modelo substituto (no seu caso content.php é esse arquivo de peça de modelo de fallback padrão). Então, você ainda pode precisar dele . Então não apague, deixe sozinho.

A seguir, a parte do CÓDIGO da função principal get_template_part . Você verá que o núcleo sempre carrega $templates[] = "{$slug}.php"; como o arquivo de modelo de fallback final:

function get_template_part( $slug, $name = null ) {
    // ... more CODE from WP core
    $templates = array();
    $name = (string) $name;
    if ( '' !== $name )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php"; 
    locate_template($templates, true, false);
}

Em seguida, na função locate_template , ele percorre o array $templates até encontrar o correspondente arquivo, com o seguinte código:

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;
        } elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        } elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
            $located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
            break;
        }
    }
    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Como você pode ver no CÓDIGO acima, se você excluir content.php e se o usuário do tema tiver um formato de postagem para o qual você não tem um arquivo de peça de modelo, o WordPress não localizará o arquivo de modelo para, então simplesmente carregará nada nesse caso. Como tentativa final, o WordPress tenta carregar um arquivo de peça de modelo do diretório wp-includes/theme-compat/ core, mas não há nenhum arquivo de peça de modelo content.php no núcleo do WP.

  

Observação: No entanto, se você estiver criando um tema filho e o tema pai já contiver o arquivo content.php , não será necessário o arquivo content.php no tema filho (se você não fizer nenhuma modificação lá), porque, nesse caso, o WordPress usará o arquivo content.php do tema pai como o arquivo de peça de modelo substituto.

    
por Fayaz 06.04.2017 / 11:33
0
  

Você poderia obter apenas o modelo (content.php). Isso é   geralmente menos do que ideal.

Em o blog do teamtreehouse deve limpar o seu pergunta.

Para mim, essa abordagem é uma maneira alternativa.

    
por Vishal Kumar Sahu 06.04.2017 / 10:41