O que, especificamente, deve ser incluído no theme_name_setup ()?

4

Eu "herdei" o desenvolvimento de um tema antigo que agora estou atualizando para o WP 3.9. O código do tema vem com um functions.php que possui uma função theme_name_setup () que se conecta ao after_theme_setup. Por enquanto, tudo bem. No entanto, parece que quase tudo sob o sol foi lançado na função theme_name_setup () e todos os outros arquivos de tema para páginas de administração, funções de modelagem, funções de estilização, cabeçalhos personalizados, widgets, etc - tudo isso é chamado (via require_once ) dentro deste theme_name_setup (), e é, portanto, todo carregado, quer queira quer não, no gancho after_theme_setup.

Eu olhei para outros temas (o padrão 2012, -13, -14 e sublinhados) que tem uma função theme_setup () muito mais limpa, e eu sei o suficiente para saber que ligar absolutamente tudo - funções dentro de funções - no O mesmo gancho é um acidente de trem esperando para acontecer (embora o tema pareça funcionar bem dessa forma por enquanto). Eu tenho os exemplos dos temas padrão para passar, mas o que eu quero saber (e não consigo encontrar via Google todo poderoso) é especificamente:

Além de add_theme_support (), considerações de texto / localização, register_nav_menus () e suporte a miniaturas, e se alguma coisa, deve ser especificamente incluída na função theme_name_setup (), conectada como descrito acima? (E, por extensão, todo o resto deve ser definido / enganchado em outro lugar).

    
por Caspar 09.07.2014 / 13:14

1 resposta

5

Nada. Uma função theme_name_setup() nem deveria existir.

  1. O nome é muito vago. O que significa configuração ? Esta é também a raiz da sua pergunta, porque esse nome não nos diz nada sobre o que a função faz. Poderia ser qualquer coisa ou nada. Tecnicamente, os temas nem precisam de functions.php . Mas eles funcionam, a configuração acontece pelo WordPress.

  2. Ele viola o princípio de responsabilidade única . Esse termo vem do objeto programação orientada, mas a ideia se aplica a todo código bom, é até o núcleo da filosofia do UNIX : Faça uma coisa e faça bem.
    Isso nos leva ao próximo problema.

  3. Isso prejudica a interoperabilidade. Considere a seguinte função:

    add_action( 'after_setup_theme', 'theme_name_setup' );
    
    function theme_name_setup() {
        require 'widgets.php';
        require 'comment-enhancements.php';
        require 'javascript.php';
    }
    

    O que preciso fazer para carregar apenas widgets.php e javascript.php no meu tema filho? Eu tenho que desengatar a função ampla e repetir partes do seu código. E então eu rezo para que você nunca renomeie, combine ou divida arquivos em uma atualização do seu tema pai.

Para expressar isso de uma forma mais positiva:

  • Dê a cada classe e função um nome que diga ao leitor o que ela faz. Se você não consegue encontrar um nome bom e preciso, esse código provavelmente é demais.

  • Você pode usar o mesmo gancho com vários retornos de chamada. Este é o ponto da API de ação / filtro. Use-o.

  • Tente permitir que cada função retorne um valor útil, para que você possa testá-la e depurá-la separadamente. load_theme_textdomain() por exemplo retorna TRUE quando um arquivo foi encontrado, FALSE caso contrário. Se você estiver usando uma função separada para carregar a tradução, poderá usar esse valor de retorno.

por fuxia 16.07.2014 / 01:07