Incluir arquivos no arquivo de funções do tema filho

8

Normalmente, no meu arquivo de função de tema, solicitarei outros arquivos para manter as coisas organizadas.

require_once("foo.php");

Agora, trabalhando em um tema infantil, eu gostaria de fazer o mesmo. Estou adicionando opções de administrador personalizadas e parece impossível incluir código. Eu ecoei o caminho para ter certeza de que estou chamando o arquivo correto e o local correto, mas nada dentro desse arquivo parece ser executado. O código funciona bem se colocado dentro do arquivo de funções do tema filho.

curtismchale
fonte
Você pode postar um pouco mais do seu código para mostrar exatamente o que está fazendo?
26610 MikeSchinkel

Respostas:

13

Os temas filhos referenciam os temas-pai pelo nome do diretório e, em uma instalação normal, todos os seus temas residem wp-content/themes/, então eu diria que é bom fazer referência a esses temas pelo caminho relativo:

include '../parent-theme/some-file.php';

Se isso lhe deixa desconfortável, observo as seguintes constantes no WordPress 3.0.1 com um tema de vinte filhos chamado tt-child :

TEMPLATEPATH     /home/adam/public_html/wp3/wp-content/themes/twentyten
STYLESHEETPATH   /home/adam/public_html/wp3/wp-content/themes/tt-child

Portanto, você pode fazer o seguinte no tema filho para fazer referência ao diretório de temas pai:

include TEMPLATEPATH . '/some-file.php';
Annika Backstrom
fonte
O constante STYLESHEETPATH ​​é o que eu estava procurando. Inclui trabalho em um tema filho, se você o usar.
Curtismchale 26/10/10
Estou realmente surpreso que você possa considerar usar um caminho codificado ... um tema não deve funcionar apenas em um ambiente. Eu poderia entender se get_template_directory () não existia ... mas existe. Eu só percebi que é uma questão a partir de 2010 lol
Christian
A opção superior não funcionou para mim. Não sei por que motivo, quando eu certamente tinha o caminho relativo correto para o arquivo pai. A segunda opção funcionou para mim, então obrigado.
bowlerae
12

Em um tema infantil, a maneira correta é

require_once( get_stylesheet_directory() . '/foo.php');

Enquanto estiver no tema principal, você ainda pode usar

require_once ( get_template_directory() . '/foo.php' );

get_template_directory()ainda funciona no tema filho, infelizmente, tenha como alvo o diretório de temas pai. No seu caso, é útil

cristão
fonte
11
Eu tive que usar um '/', por exemplo, require_once (get_stylesheet_directory (). '/Foo.php');
ssaltman 2/01
obrigado @ssaltman. Você está certo, a documentação confirma: developer.wordpress.org/reference/functions/… Editei minha resposta
Christian
2

Olá @curtismchale :

Não sei se é isso ou não, mas você precisa incluir aspas foo.php, assim:

require_once('foo.php');

Isso resolve o seu problema?

MikeSchinkel
fonte
Ha boa nota. Eu perdi aqui, mas eu tinha no tema infantil.
Curtismchale 26/10/10
2

Use <?php get_template_part( 'name-the-page-here' ); ?>. Sem a extensão .php

Everaldo Matias
fonte
2

Você definitivamente não deseja codificar o URL. A maneira correta de fazer isso é

require_once( get_stylesheet_directory(). '/my_included_file.php' );

Veja mais informações no Wordpress Codex

Agora, se você estiver modificando o header.php, que inclui um include, faça referência a ele da seguinte maneira:

require_once( get_stylesheet_directory() . '/../parenthteme/my_included_file.php' );
Marlyse Comte
fonte
0

É completamente possível e normal fazer inclusões functions.php.

Eu faço isso no meu tema filho ( phpé um subdiretório para código):

include 'php/core.php';

Se você tiver problemas sem motivo aparente, tente ativar o modo de depuração em wp-config.php:

define('WP_DEBUG', true);

Pode haver erros relevantes acontecendo, mas não exibidos.

Rarst
fonte