{"id":767,"date":"2017-04-19T17:24:02","date_gmt":"2017-04-19T20:24:02","guid":{"rendered":"https:\/\/felipeelia.com.br\/?p=767"},"modified":"2022-09-04T12:04:57","modified_gmt":"2022-09-04T15:04:57","slug":"wordpress-tema-filho-basico-ao-avancado","status":"publish","type":"post","link":"https:\/\/felipeelia.com.br\/wordpress-tema-filho-basico-ao-avancado\/","title":{"rendered":"WordPress: tema filho do b\u00e1sico ao avan\u00e7ado"},"content":{"rendered":"
Este post faz parte de um conjunto de artigos organizados em um Curso de WordPress<\/a>. Acesse o link para outros conte\u00fados.<\/blockquote>\n\n\n\n\u00cdndice<\/h2>\n\n\n\n
\n
- O que s\u00e3o temas filhos?<\/a><\/li>\n\n\n\n
- Quando N\u00c3O \u00e9 preciso usar um tema filho no WordPress<\/a><\/li>\n\n\n\n
- Criando seu tema filho<\/a>\n
\n
- N\u00e3o fa\u00e7a bagun\u00e7a<\/a><\/li>\n\n\n\n
- Fazendo do seu tema filho algo \u00fatil<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n
- Coisas que voc\u00ea precisa saber antes de continuar<\/a>\n
\n
- O functions.php do tema FILHO \u00e9 carregado PRIMEIRO<\/a><\/li>\n\n\n\n
- Fun\u00e7\u00f5es do WordPress para tema pai e para tema filho<\/a><\/li>\n\n\n\n
- N\u00e3o altere o c\u00f3digo do tema pai, mas entenda como ele funciona<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n
- Incluindo arquivos CSS<\/a>\n
\n
- Adicionando o style.css do tema pai<\/a><\/li>\n\n\n\n
- Incluindo um CSS no final da fila<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n
- Temas filhos na vida real<\/a>\n
\n
- O arquivo x.php do meu tema filho n\u00e3o sobrescreve o do pai<\/a><\/li>\n\n\n\n
- Quando posso instalar e criar um tema filho?<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n
O que s\u00e3o temas filhos?<\/h2>\n\n\n\n
Um tema filho do WordPress \u00e9 um tema que precisa de outro para funcionar. \u00c9 uma esp\u00e9cie de subtema ou um complemento ao tema pai. Um dos recursos mais bacanas do WordPress, eles permitem que voc\u00ea estenda um tema sem alterar seu c\u00f3digo. Dessa forma voc\u00ea consegue aplicar as personaliza\u00e7\u00f5es necess\u00e1rias para o projeto e continuar atualizando aquele tema que o cliente comprou no ThemeForest.<\/p>\n\n\n\n
Outro uso interessante para os temas filhos s\u00e3o em instala\u00e7\u00f5es multisites. Se os sites forem ligeiramente parecidos, voc\u00ea pode desenvolver o tema do primeiro e apenas aplicar altera\u00e7\u00f5es nos demais, facilitando a manuten\u00e7\u00e3o e otimizando o tempo de desenvolvimento.<\/p>\n\n\n\n\n\n\n
Quando N\u00c3O \u00e9 preciso usar um tema filho no WordPress<\/h2>\n\n\n\n
A partir da vers\u00e3o 4.7 n\u00e3o \u00e9 mais preciso usar um tema filho se voc\u00ea s\u00f3 precisa alterar CSS. Para isso basta ir em Personalizar e acrescentar seu c\u00f3digo no campo CSS adicional<\/strong>. Se voc\u00ea tiver certeza absoluta de que CSS ser\u00e3o as \u00fanicas altera\u00e7\u00f5es necess\u00e1rias, voc\u00ea n\u00e3o precisa de um tema filho. Caso contr\u00e1rio, isto \u00e9, se voc\u00ea acha que existe uma possibilidade, mesmo que remota, que voc\u00ea precise alterar outra coisa no tema<\/a>, crie desde o come\u00e7o um tema filho e mexa a partir dele.<\/p>\n\n\n\n
Criando seu tema filho<\/h2>\n\n\n\n
Para que seu tema filho seja listado, voc\u00ea s\u00f3 precisa criar uma pasta com qualquer nome e nela colocar um arquivo com nome
style.css<\/code> que comece da seguinte forma:<\/p>\n\n\n\n
\/*\n * Template: twentyseventeen\n *\/<\/code><\/pre>\n\n\n\n
Substituindo
twentyseventeen<\/code> pelo nome da pasta do seu tema.<\/p>\n\n\n\n
N\u00e3o fa\u00e7a bagun\u00e7a<\/h3>\n\n\n\n
Isso \u00e9 s\u00f3 o que voc\u00ea precisa, mas seja caprichoso<\/strong>. Para o nome da pasta, por exemplo, o ideal \u00e9 usar o mesmo nome do tema pai seguido de
-child<\/code>. O cabe\u00e7alho do
style.css<\/code> que eu passei a\u00ed em cima tamb\u00e9m \u00e9 s\u00f3 o m\u00ednimo, mas o ideal \u00e9 colocar mais do que isso. No codex<\/a> vemos todas as op\u00e7\u00f5es poss\u00edveis:<\/p>\n\n\n\n
\/*\n * Theme Name: Twenty Fifteen Child\n * Theme URI: http:\/\/example.com\/twenty-fifteen-child\/\n * Description: Twenty Fifteen Child Theme\n * Author: John Doe\n * Author URI: http:\/\/example.com\n * Template: twentyfifteen\n * Version: 1.0.0\n * License: GNU General Public License v2 or later\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-2.0.html\n * Tags: light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready\n * Text Domain: twenty-fifteen-child\n *\/<\/code><\/pre>\n\n\n\n
O tema de exemplo l\u00e1 \u00e9 o
twentyfifteen<\/code>.<\/p>\n\n\n\n
Fazendo do seu tema filho algo \u00fatil<\/h3>\n\n\n\n
O WordPress tentar\u00e1 carregar o arquivo
functions.php<\/code> se seu tema filho tiver um, al\u00e9m do
functions.php<\/code> do tema pai<\/strong>. Al\u00e9m disso, ele tentar\u00e1 usar qualquer arquivo da hierarquia de templates<\/a> que seu tema filho possua, ao inv\u00e9s de usar o arquivo do tema pai. Resumindo: se o tema filho possui um
archive.php<\/code>, ele usa o do filho, sen\u00e3o pega o do pai mesmo.<\/p>\n\n\n\n
Coisas que voc\u00ea precisa saber antes de continuar<\/h2>\n\n\n\n
Entender como funcionam os hooks no WordPress \u00e9 essencial<\/strong> para n\u00e3o fazer besteira. Corra l\u00e1 no post que eu fiz sobre isso<\/a>, d\u00ea uma lida e volte. \u00c9 s\u00e9rio, entender como isso funciona vai fazer falta no futuro (vai fazer falta para qualquer coisa que voc\u00ea fa\u00e7a no WordPress).<\/p>\n\n\n\n
O functions.php do tema FILHO \u00e9 carregado PRIMEIRO<\/h3>\n\n\n\n
Sim, \u00e9 isso mesmo.<\/strong> Dessa forma, se seu tema pai estiver preparado pra isso, voc\u00ea pode sobrescrever algumas fun\u00e7\u00f5es. Por exemplo, se no tema filho voc\u00ea incluir<\/p>\n\n\n\n
function theme_special_nav() {\n \/\/ Faz alguma coisa de um jeito mais legal.\n}<\/code><\/pre>\n\n\n\n
e no tema pai tiver<\/p>\n\n\n\n
if ( ! function_exists( 'theme_special_nav' ) ) {\n function theme_special_nav() {\n \/\/ Faz alguma coisa.\n }\n}<\/code><\/pre>\n\n\n\n
a sua vers\u00e3o ser\u00e1 usada. Sua fun\u00e7\u00e3o \u00e9 definida primeiro, logo o php n\u00e3o entra no
if<\/code> do tema pai. Se o carregamento fosse invertido, isto \u00e9, o tema filho depois do tema pai, a execu\u00e7\u00e3o passaria por dentro do
if<\/code>, j\u00e1 que a fun\u00e7\u00e3o ainda n\u00e3o existe e, no seu
functions.php<\/code>, ela causaria um erro de execu\u00e7\u00e3o (Cannot redeclare nome_da_funcao()<\/em>), por estar duplicada.
Repare na necessidade do tema pai usar a fun\u00e7\u00e3ofunction_exists<\/code>, se ele n\u00e3o fizer isso voc\u00ea n\u00e3o pode declarar a fun\u00e7\u00e3o<\/strong> no seu
functions.php<\/code> ou causar\u00e1 o erro da mesma forma.<\/p>\n\n\n\n
Mas se o functions.php do tema filho \u00e9 carregado primeiro, como \u00e9 que eu vou colocar minhas coisas para aparecerem depois???<\/h4>\n\n\n\n
N\u00e3o leu o post que eu indiquei ali em cima<\/a>, n\u00e9? Atrav\u00e9s do mecanismo de hooks do WP voc\u00ea pode passar por par\u00e2metro a prioridade da sua fun\u00e7\u00e3o: passe uma prioridade mais alta e sua fun\u00e7\u00e3o ser\u00e1 executada depois. Vamos falar mais sobre isso mais para frente.<\/p>\n\n\n\n
Fun\u00e7\u00f5es do WordPress para tema pai e para tema filho<\/h3>\n\n\n\n
Em fun\u00e7\u00f5es que se referem a temas, o WordPress segue a conven\u00e7\u00e3o de que
template<\/code> aponta para o tema pai e
stylesheet<\/code> para o tema filho. Se n\u00e3o houver tema filho os dois apontam para o mesmo lugar.<\/p>\n\n\n\n
Tema pai<\/strong><\/th> Tema filho<\/strong><\/th><\/tr><\/thead> get_template_directory_uri()<\/td> get_stylesheet_directory_uri()<\/td><\/tr> get_template_directory_uri() . \u2019\/style.css\u2019<\/td> get_stylesheet_uri()<\/td><\/tr> get_template_directory()<\/td> get_stylesheet_directory()<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n E assim segue. Uma outra fun\u00e7\u00e3o que pode ser \u00fatil \u00e9 a is_child_theme()<\/a>.<\/p>\n\n\n\n