O documento fornece dicas sobre boas práticas de programação no WordPress, incluindo não usar a função query_posts(), estruturar templates em partes, usar WP_Query em loops e separar regra de negócio de templates.
O documento fornece uma introdução sobre o livro "Aprendendo PHP e MySQL". Resume-se em:
1. O livro ensina como criar sites dinâmicos usando PHP e MySQL, apresentando os conceitos e ferramentas necessárias de forma didática.
2. É destinado a quem deseja aprender a desenvolver sites dinâmicos, desde designers até programadores, requerendo apenas noções básicas de HTML.
3. O livro explica como instalar e usar PHP, MySQL e outros softwares, apresenta os principais recursos de cada tecnologia
1. O documento explica a hierarquia de templates do WordPress, que determina qual arquivo será usado para cada tipo de página.
2. WordPress usa a string de consulta da URL para decidir qual template ou conjunto de templates deve ser usado para exibir a página.
3. Os principais arquivos de template incluem header.php, footer.php, index.php, page.php, single.php, category.php e archive.php.
O documento apresenta um resumo sobre:
1) O livro ensina a desenvolver aplicações web usando a arquitetura MVC do ASP.NET;
2) Explica os principais conceitos do ASP.NET MVC como Model, View e Controller e como eles se relacionam;
3) Fornece instruções sobre como configurar o ambiente de desenvolvimento com o Visual Studio e o IIS para criar e executar projetos ASP.NET MVC.
O documento resume as principais funcionalidades do ASP.NET MVC 5, incluindo novas versões mais fáceis de instalar e atualizar, suporte a Bootstrap, identidade com autenticação por vários provedores, melhorias nos helpers HTML, suporte a enums e routing por atributos.
O documento descreve o framework CakePHP, incluindo suas vantagens, requisitos, instalação e configuração. O autor também apresenta um exemplo de aplicação para empréstimos de livros entre professores e alunos utilizando o CakePHP.
Curso de HTML5 com @zarathon
Aula01 - Introdução ao HTML
- Link para a video-aula : http://youtu.be/GL_ULlrwUMI
Inscrevam-se no canal para ficar sempre informado de quando sair um conteúdo novo!
Me sigam no twitter para mais informações: @zarathon
Dúvidas, críticas deixem nos comentários... Responderei a todos com muita satisfação!
Montando sites com XHTML e CSS utilizando os padrões webigorpimentel
O documento apresenta uma introdução sobre a história da web, desde sua criação por Tim Berners-Lee até os padrões atuais. Aborda conceitos como HTML, XHTML, CSS e a importância da semântica e dos padrões web para um código acessível.
O documento fornece dicas sobre boas práticas de programação no WordPress, incluindo não usar a função query_posts(), estruturar templates em partes, usar WP_Query em loops e separar regra de negócio de templates.
O documento fornece uma introdução sobre o livro "Aprendendo PHP e MySQL". Resume-se em:
1. O livro ensina como criar sites dinâmicos usando PHP e MySQL, apresentando os conceitos e ferramentas necessárias de forma didática.
2. É destinado a quem deseja aprender a desenvolver sites dinâmicos, desde designers até programadores, requerendo apenas noções básicas de HTML.
3. O livro explica como instalar e usar PHP, MySQL e outros softwares, apresenta os principais recursos de cada tecnologia
1. O documento explica a hierarquia de templates do WordPress, que determina qual arquivo será usado para cada tipo de página.
2. WordPress usa a string de consulta da URL para decidir qual template ou conjunto de templates deve ser usado para exibir a página.
3. Os principais arquivos de template incluem header.php, footer.php, index.php, page.php, single.php, category.php e archive.php.
O documento apresenta um resumo sobre:
1) O livro ensina a desenvolver aplicações web usando a arquitetura MVC do ASP.NET;
2) Explica os principais conceitos do ASP.NET MVC como Model, View e Controller e como eles se relacionam;
3) Fornece instruções sobre como configurar o ambiente de desenvolvimento com o Visual Studio e o IIS para criar e executar projetos ASP.NET MVC.
O documento resume as principais funcionalidades do ASP.NET MVC 5, incluindo novas versões mais fáceis de instalar e atualizar, suporte a Bootstrap, identidade com autenticação por vários provedores, melhorias nos helpers HTML, suporte a enums e routing por atributos.
O documento descreve o framework CakePHP, incluindo suas vantagens, requisitos, instalação e configuração. O autor também apresenta um exemplo de aplicação para empréstimos de livros entre professores e alunos utilizando o CakePHP.
Curso de HTML5 com @zarathon
Aula01 - Introdução ao HTML
- Link para a video-aula : http://youtu.be/GL_ULlrwUMI
Inscrevam-se no canal para ficar sempre informado de quando sair um conteúdo novo!
Me sigam no twitter para mais informações: @zarathon
Dúvidas, críticas deixem nos comentários... Responderei a todos com muita satisfação!
Montando sites com XHTML e CSS utilizando os padrões webigorpimentel
O documento apresenta uma introdução sobre a história da web, desde sua criação por Tim Berners-Lee até os padrões atuais. Aborda conceitos como HTML, XHTML, CSS e a importância da semântica e dos padrões web para um código acessível.
O documento fornece recomendações para otimizar o desempenho de sites WordPress, abordando ferramentas de análise, servidores, plugins, imagens, ícones, recursos externos, cache e construtores de páginas.
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPressWordCamp Floripa
O documento discute estratégias para melhorar a performance de sites WordPress com foco nas métricas Core Web Vitals do Google. O palestrante Daniel Paz aborda temas como otimização de imagens, uso de CDNs, cache, atraso de scripts e melhorias nas práticas de desenvolvimento para melhor experiência do usuário.
O documento fornece uma introdução ao WordPress, o CMS mais popular do mundo. Explica que o WordPress é uma plataforma de código aberto para gerenciamento de conteúdo online desenvolvida em PHP e MySQL, com foco em estética, padrões web e usabilidade. Também descreve os principais recursos do WordPress como temas, painel de controle, template tags e loops para exibição de conteúdo.
O documento discute as principais mudanças e recursos introduzidos pelo HTML5, incluindo nova estrutura, elementos e atributos. Também analisa o suporte dos navegadores a esses recursos e estratégias para uso, como a detecção de recursos com Modernizr e o desenvolvimento modular dos motores de renderização. Por fim, apresenta em detalhes os novos recursos multimídia como vídeo, áudio e codecs, além de novas APIs como Storage e offline.
Essa palestra é ideal para quem nunca ouviu falar do WordPress ou deseja aprimorar seus conhecimentos sobre as operações básicas deste gerenciador de conteúdos. O WordPress é a ferramenta perfeita para aqueles que desejam criar blogs ou websites, para fins pessoais ou profissionais.
Ferramentas Livres para Desenvolvimento Webigorpimentel
O documento discute a história da web, as etapas de desenvolvimento de um site, incluindo coleta de informações, planejamento, design, desenvolvimento, testes e publicação. Também aborda as tecnologias fundamentais para desenvolvimento web como HTML, CSS, JavaScript, PHP e banco de dados MySQL.
O documento fornece instruções sobre como usar o WordPress para criar e gerenciar um blog ou site. Ele explica conceitos como contas de usuários e permissões, criação e organização de posts, adição de enquetes e mídia, entre outros. O documento visa capacitar usuários sobre o poderoso sistema de gerenciamento de conteúdo WordPress.
O documento discute os fundamentos da HTML5, incluindo tags semânticas, links descritivos, meta tags e formas de adicionar semântica a documentos HTML como RDFa, Microformats e Microdata. Apresenta exemplos dessas técnicas e discute como elas melhoram a acessibilidade e o desempenho de sites.
Este documento fornece uma introdução sobre como criar módulos para o Divi no WordPress de forma simples. Explica a estrutura básica de arquivos necessária, como criar funções e seções, e os principais tipos de campos disponíveis. Também mostra como renderizar os dados no frontend e incluir arquivos CSS e JS.
O documento discute o desenvolvimento de sites web utilizando os padrões XHTML e CSS. Aborda a história da web, os padrões web, as diferenças entre HTML e XHTML, e como CSS pode ser usado para separar a apresentação do conteúdo em sites web.
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Leo Baiano
O documento discute vários tópicos relacionados ao desenvolvimento com WordPress, incluindo temas, plugins, queries, modelos, internacionalização, hooks, classes CSS e funções úteis como wp_mail(), wp_remote_get() e add_image_size().
As novas features que essas duas tecnologias trouxeram para o mundo da Web. Formas de se ter agilidade com elas e a semântica ao documento. Bem-vindo ao mundo do HTML5 e CSS3!
O documento discute as mudanças trazidas pelo HTML5, incluindo a adição de elementos semânticos que melhor descrevem o conteúdo, como section, header e article, e a capacidade de incorporar vídeos e mídia diretamente na página sem a necessidade de plugins.
Este documento fornece uma introdução ao Adobe Dreamweaver CS5, descrevendo como criar e gerenciar projetos de sites, adicionar conteúdo como texto, imagens e multimídia, trabalhar com hiperlinks, tabelas e folhas de estilo, e adicionar comportamentos interativos. O foco é ensinar as principais ferramentas e recursos do Dreamweaver para construir sites estáticos e dinâmicos de forma profissional.
O documento fornece uma introdução sobre o que é SEO (Otimização para mecanismos de busca), comparando-o com SEM (Marketing de mecanismos de busca). Explica brevemente as técnicas de otimização On Page (no próprio site) e Off Page (em outros sites), como títulos, meta tags e URLs amigáveis. Também recomenda ferramentas e sites de referência sobre o assunto.
O documento discute as principais mudanças e recursos do HTML5, incluindo:
1) Novas tags semânticas como <header>, <nav> e <section> que tornam a estrutura da página mais organizada e acessível;
2) Novos tipos de entrada para formulários como data, hora, cor, número, etc.;
3) Recursos para armazenamento offline e cache de páginas para uso offline.
Palestra realizada na Campus Party Brasil 2014. #CPBr7
Aprenda na prática como criar um tema para o WordPress do zero, usando HTML e CSS puro, ou usando ferramentas disponíveis na Internet, com um passo a passo.
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Celso Fernandes
O documento discute estratégias para melhorar o desempenho de sites, incluindo otimização de requisições, uso de cache, escolha entre Nginx e Apache e ferramentas de análise e teste. O objetivo é reduzir tempo de resposta do servidor e melhorar a experiência do usuário.
Este documento fornece uma introdução ao Moodle, um sistema de gerenciamento de cursos online open-source. Ele discute os recursos básicos do Moodle como cadastro de usuários, criação de cursos, adição de conteúdo e atividades. Além disso, fornece detalhes sobre como usar recursos como fóruns, bate-papos e questionários no Moodle.
Teoria e Pratica dos Conselhos TutelaresIgor Queiroz
Este documento apresenta um guia sobre os conselhos tutelares e conselhos dos direitos da criança e do adolescente no Brasil. O guia discute o desenvolvimento histórico da proteção de crianças e adolescentes, o papel e funcionamento dos conselhos, a comunicação entre os conselhos e outras instituições, e o orçamento público para os direitos da criança. O objetivo é fornecer informações sobre esses mecanismos de proteção estabelecidos pelo Estatuto da Criança e do Adolescente.
O documento fornece recomendações para otimizar o desempenho de sites WordPress, abordando ferramentas de análise, servidores, plugins, imagens, ícones, recursos externos, cache e construtores de páginas.
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPressWordCamp Floripa
O documento discute estratégias para melhorar a performance de sites WordPress com foco nas métricas Core Web Vitals do Google. O palestrante Daniel Paz aborda temas como otimização de imagens, uso de CDNs, cache, atraso de scripts e melhorias nas práticas de desenvolvimento para melhor experiência do usuário.
O documento fornece uma introdução ao WordPress, o CMS mais popular do mundo. Explica que o WordPress é uma plataforma de código aberto para gerenciamento de conteúdo online desenvolvida em PHP e MySQL, com foco em estética, padrões web e usabilidade. Também descreve os principais recursos do WordPress como temas, painel de controle, template tags e loops para exibição de conteúdo.
O documento discute as principais mudanças e recursos introduzidos pelo HTML5, incluindo nova estrutura, elementos e atributos. Também analisa o suporte dos navegadores a esses recursos e estratégias para uso, como a detecção de recursos com Modernizr e o desenvolvimento modular dos motores de renderização. Por fim, apresenta em detalhes os novos recursos multimídia como vídeo, áudio e codecs, além de novas APIs como Storage e offline.
Essa palestra é ideal para quem nunca ouviu falar do WordPress ou deseja aprimorar seus conhecimentos sobre as operações básicas deste gerenciador de conteúdos. O WordPress é a ferramenta perfeita para aqueles que desejam criar blogs ou websites, para fins pessoais ou profissionais.
Ferramentas Livres para Desenvolvimento Webigorpimentel
O documento discute a história da web, as etapas de desenvolvimento de um site, incluindo coleta de informações, planejamento, design, desenvolvimento, testes e publicação. Também aborda as tecnologias fundamentais para desenvolvimento web como HTML, CSS, JavaScript, PHP e banco de dados MySQL.
O documento fornece instruções sobre como usar o WordPress para criar e gerenciar um blog ou site. Ele explica conceitos como contas de usuários e permissões, criação e organização de posts, adição de enquetes e mídia, entre outros. O documento visa capacitar usuários sobre o poderoso sistema de gerenciamento de conteúdo WordPress.
O documento discute os fundamentos da HTML5, incluindo tags semânticas, links descritivos, meta tags e formas de adicionar semântica a documentos HTML como RDFa, Microformats e Microdata. Apresenta exemplos dessas técnicas e discute como elas melhoram a acessibilidade e o desempenho de sites.
Este documento fornece uma introdução sobre como criar módulos para o Divi no WordPress de forma simples. Explica a estrutura básica de arquivos necessária, como criar funções e seções, e os principais tipos de campos disponíveis. Também mostra como renderizar os dados no frontend e incluir arquivos CSS e JS.
O documento discute o desenvolvimento de sites web utilizando os padrões XHTML e CSS. Aborda a história da web, os padrões web, as diferenças entre HTML e XHTML, e como CSS pode ser usado para separar a apresentação do conteúdo em sites web.
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Leo Baiano
O documento discute vários tópicos relacionados ao desenvolvimento com WordPress, incluindo temas, plugins, queries, modelos, internacionalização, hooks, classes CSS e funções úteis como wp_mail(), wp_remote_get() e add_image_size().
As novas features que essas duas tecnologias trouxeram para o mundo da Web. Formas de se ter agilidade com elas e a semântica ao documento. Bem-vindo ao mundo do HTML5 e CSS3!
O documento discute as mudanças trazidas pelo HTML5, incluindo a adição de elementos semânticos que melhor descrevem o conteúdo, como section, header e article, e a capacidade de incorporar vídeos e mídia diretamente na página sem a necessidade de plugins.
Este documento fornece uma introdução ao Adobe Dreamweaver CS5, descrevendo como criar e gerenciar projetos de sites, adicionar conteúdo como texto, imagens e multimídia, trabalhar com hiperlinks, tabelas e folhas de estilo, e adicionar comportamentos interativos. O foco é ensinar as principais ferramentas e recursos do Dreamweaver para construir sites estáticos e dinâmicos de forma profissional.
O documento fornece uma introdução sobre o que é SEO (Otimização para mecanismos de busca), comparando-o com SEM (Marketing de mecanismos de busca). Explica brevemente as técnicas de otimização On Page (no próprio site) e Off Page (em outros sites), como títulos, meta tags e URLs amigáveis. Também recomenda ferramentas e sites de referência sobre o assunto.
O documento discute as principais mudanças e recursos do HTML5, incluindo:
1) Novas tags semânticas como <header>, <nav> e <section> que tornam a estrutura da página mais organizada e acessível;
2) Novos tipos de entrada para formulários como data, hora, cor, número, etc.;
3) Recursos para armazenamento offline e cache de páginas para uso offline.
Palestra realizada na Campus Party Brasil 2014. #CPBr7
Aprenda na prática como criar um tema para o WordPress do zero, usando HTML e CSS puro, ou usando ferramentas disponíveis na Internet, com um passo a passo.
Reduzindo Tempo de Resposta do Servidor - WordCamp BH 2014Celso Fernandes
O documento discute estratégias para melhorar o desempenho de sites, incluindo otimização de requisições, uso de cache, escolha entre Nginx e Apache e ferramentas de análise e teste. O objetivo é reduzir tempo de resposta do servidor e melhorar a experiência do usuário.
Este documento fornece uma introdução ao Moodle, um sistema de gerenciamento de cursos online open-source. Ele discute os recursos básicos do Moodle como cadastro de usuários, criação de cursos, adição de conteúdo e atividades. Além disso, fornece detalhes sobre como usar recursos como fóruns, bate-papos e questionários no Moodle.
Teoria e Pratica dos Conselhos TutelaresIgor Queiroz
Este documento apresenta um guia sobre os conselhos tutelares e conselhos dos direitos da criança e do adolescente no Brasil. O guia discute o desenvolvimento histórico da proteção de crianças e adolescentes, o papel e funcionamento dos conselhos, a comunicação entre os conselhos e outras instituições, e o orçamento público para os direitos da criança. O objetivo é fornecer informações sobre esses mecanismos de proteção estabelecidos pelo Estatuto da Criança e do Adolescente.
Este documento apresenta uma estratégia de e-learning para o Centro de Formação da Amadora. Inclui um diagnóstico da situação atual, uma análise SWOT, a aplicação do modelo das 5 forças de Michael Porter e objetivos e planos de ação para o desenvolvimento do e-learning, incluindo a estrutura organizacional e metodologias necessárias.
Este documento discute as responsabilidades de diferentes partes de uma organização em relação à gestão de pessoas. A diretoria é responsável por comunicar a estratégia, definir competências-chave e avaliar desempenho. Os gestores são responsáveis por recrutar, avaliar potencial e desempenho da equipe, e desenvolvê-la. O RH é responsável por consultoria, processos de gestão de pessoas e capacitar gestores.
Midia como fazer um planejamento de midia na pratica (3)profjucavalcante
Este documento apresenta um livro sobre planejamento de mídia. O livro discute conceitos importantes como mídia, veículo, audiência, cobertura de público-alvo, frequência e avaliação de custos. O livro fornece orientações sobre como aplicar esses conceitos na prática do planejamento de mídia.
Este documento apresenta informações sobre cargos e responsabilidades relacionadas à segurança e saúde no trabalho no governo brasileiro, incluindo o Presidente da República, Ministro do Trabalho e Emprego, Secretário de Políticas Públicas de Emprego, Diretor do Departamento de Qualificação Profissional e outros. Além disso, fornece detalhes sobre publicações e normas relacionadas à qualificação profissional no Brasil.
GestãO Do Conhecimento Ed Consulting PdfED Consulting
1. O documento discute os fundamentos e objetivos da gestão do conhecimento organizacional, que incluem identificar, criar, compartilhar, distribuir e manter recursos de conhecimento organizacional.
2. Aborda diferentes perspectivas sobre o que é conhecimento, incluindo conhecimento tácito versus explícito.
3. Discutem vários autores e suas definições de conhecimento, enfatizando seu caráter dinâmico, incerto e variável.
Capítulo 1
- Classificação dos processos de soldagem em três famílias: soldagem por fusão, soldagem por pressão e brasagem
Capítulo 2
- Descrição do processo de soldagem oxi-gás, utilizando gases como acetileno e oxigênio para gerar uma chama e fundir os metais
Capítulo 11
- Detalhamento dos capítulos seguintes e inclusão de uma bibliografia no final para consulta e aprofundamento dos temas
Este manual apresenta ferramentas de coaching para estimular o desenvolvimento de competências e melhorar o desempenho individual e organizacional. Aborda conceitos como os níveis de aprendizagem, as competências do processo de coaching e os benefícios deste. Apresenta também um modelo de coaching composto por seis fases - identificação de necessidades, estabelecimento de padrões de desempenho, planeamento, motivação, implementação e revisão - visando aplicar técnicas de coaching no contexto organizacional.
Este documento discute o papel das pessoas na organização e a importância da administração na gestão de pessoas. Primeiramente, apresenta que as pessoas podem ser vistas como parceiras ou recursos da organização, sendo preferível a visão de parceiros. Em seguida, destaca a importância da administração para guiar a organização rumo aos seus objetivos, tomando decisões sobre objetivos e utilização de recursos de forma adequada. Por fim, ressalta que a gestão de pessoas deve privilegiar a visão das pessoas como parceiros, contribuindo com conhecimento e
1) O documento discute o sono e os sonhos, especificamente a emancipação da alma durante o sono e as diferentes classificações de sonhos.
2) Os sonhos podem ser comuns, reflexivos ou espíritas, dependendo do nível de libertação da alma durante o sono.
3) Sonhos comuns refletem pensamentos e imagens do dia-a-dia, enquanto sonhos reflexivos e espíritas permitem maior atividade e contato espiritual.
O documento discute como a sexualidade é socialmente construída através de processos culturais ao invés de ser algo puramente natural ou biológico. As identidades de gênero e sexual também são moldadas por relações sociais e estão sujeitas a serem contingentes e transitórias. A aceitação social de mudanças nessas identidades ainda encontra resistência.
Este documento é um livro sobre sonhos escrito por Adenáuer Novaes. Ele contém um prefácio onde o autor discute a importância dos sonhos e como eles refletem o estado psíquico do sonhador. O livro também aborda conceitos sobre sonhos de várias perspectivas como Jung, Freud, espiritismo e outras abordagens. Por fim, o autor reflete sobre a complexidade dos sonhos e como eles podem auxiliar na compreensão do mundo externo e do desenvolvimento pessoal.
Plano de formação para uma empresa mafaldajoanatoky
Este documento apresenta um plano de formação em segurança e higiene no trabalho para trabalhadores da construção civil. O plano inclui um diagnóstico das necessidades de formação com base nos altos riscos de acidentes nesta indústria, objetivos de aprendizagem, conteúdos programáticos, métodos pedagógicos, avaliação e recursos necessários.
O documento discute técnicas de avaliação de desempenho. Em 3 frases ou menos:
1) Apresenta problemas comuns em avaliações como percepções negativas, colocar-se como juiz e falta de envolvimento do avaliado; 2) Recomenda seis passos para preparação incluindo examinar a própria mentalidade, definir direitos de ambas as partes, e planejar logisticamente a discussão; 3) Tem o objetivo de fornecer feedback construtivo e melhorar o desempenho futuro através de uma abordagem col
O documento apresenta uma compilação de diversos temas relacionados à segurança e saúde no trabalho, incluindo dicas sobre primeiros socorros, riscos de acidentes, prevenção de doenças e promoção da saúde dos trabalhadores. Está organizado em seções como "Temas para Iniciantes", "Temas Rápidos", "Temas de Segurança" e "Temas sobre Saúde".
O documento apresenta um curso sobre Gestão de Pessoas para o concurso de Analista do TRT-RS ministrado pelo professor Rodrigo Rennó. O curso abordará tópicos como evolução dos modelos de gestão de pessoas, possibilidades e limites da gestão de pessoas no setor público, planejamento de recursos humanos e gestão estratégica de pessoas. O professor apresenta suas credenciais acadêmicas e profissionais e o cronograma do curso.
O documento apresenta um resumo de 48 aulas sobre processos e procedimentos de recursos humanos em empresas. As aulas abordam tópicos como admissão de funcionários, documentação necessária, exames médicos, registro na empresa, carteira de trabalho, contratos, folha de pagamento, férias, 13o salário, rescisão de contrato e seguro-desemprego.
O titulo é click bait mas a talk não. Todo mundo que se encanta pelo WordPress, e quer começar a desenvolver, principalmente se vem de outras linguagens, fica na dúvida; posso usar namespaces? Autoload? Usar WordPress Coding Standards ou PSRs?
Quando usar um Plugin e quando fazer meu código? O que é do tema e o que é do Plugin?
O documento fornece uma introdução sobre o WordPress, explicando o que é, como funciona e como instalá-lo. Ele também discute como configurar e personalizar um site WordPress, incluindo informações sobre temas, plugins, SEO e otimização.
Porque usar Frameworks de WordPress
Desenvolvedores vem utilizando frameworks há vários anos, eles são conjuntos de códigos que permitem um grande ganho de produtividade na medida em que evitam que alguns códigos “básicos” tenham que ser re-escritos a cada novo projeto.
Nos últimos anos o WordPress se consolidou como um CMS de sucesso, e um exemplo claro disso é a enorme quantidade de Temas e Plugins disponíveis. Com essa crescente adoção e uma quantidade enorme de temas sendo criados todos os dias, era natural que surgissem os frameworks.
O documento fornece uma introdução sobre sites, blogs e o sistema WordPress. Explica que um site é um conjunto de páginas na internet acessadas por meio de navegadores, um blog permite atualizações rápidas de conteúdo de forma cronológica inversa, e WordPress é um sistema que facilita a criação e gerenciamento de blogs através de uma interface simples.
1. O documento fornece instruções sobre como criar e gerenciar um site ou blog usando a plataforma WordPress.org.
2. Explica como registrar um domínio, adquirir hospedagem, instalar o WordPress e administrar o conteúdo através do painel de controle.
3. Fornece detalhes sobre como criar páginas, posts, categorias e tags, além de usar plugins e temas para personalizar o site.
O documento discute as vantagens de usar o WordPress como plataforma de blog, incluindo: (1) ser de código aberto e gratuito, (2) ter uma grande variedade de templates e plugins, (3) ter um bom desempenho em mecanismos de busca, e (4) ter uma grande comunidade ativa que contribui para melhorias constantes.
O documento apresenta uma oficina sobre Wordpress ministrada por Aline Corso. Ela descreve sua formação acadêmica e áreas de pesquisa, além de fornecer informações sobre o que é o Wordpress, como está dividido, vantagens, requisitos e limitações. A oficina também aborda temas, plugins, widgets e dicas de SEO para melhorar o ranqueamento em mecanismos de busca.
Este documento fornece uma introdução sobre como usar o WordPress para criar e gerenciar um blog ou site. Ele explica o que é um CMS, apresenta o WordPress e ensina como instalá-lo, customizá-lo com temas e plugins, e usá-lo para publicar conteúdo.
Este documento fornece dicas para otimizar o desempenho front-end de sites WordPress, incluindo reduzir consultas desnecessárias ao banco de dados, usar compressão Zlib, gerenciar plugins de forma adequada, otimizar arquivos CSS e JavaScript, imagens e sprites CSS. O autor relata como essas técnicas melhoraram significativamente o tempo de carregamento de uma página de exemplo de 10 para 5 segundos.
O documento descreve o que são blogs, sua evolução a partir de diários online e como as ferramentas facilitaram sua popularização. Explica também como criar uma conta no Blogger e começar a editar e configurar um blog, incluindo a adição de templates e widgets.
1. O documento discute as principais partes e arquivos do WordPress, incluindo plugins, themes e widgets.
2. Ele fornece estatísticas sobre o uso do WordPress, mostrando que é o CMS mais utilizado na internet.
3. O documento também dá dicas sobre segurança, recomenda plugins e discute a diferença entre wordpress.org e wordpress.com.
Apresentação que fiz no evento CMS Brasil dia 20 de junho de 2009.
Abrange todo o funcionamento do wordpress e dá dicas de macetes para utilizá-lo como um CMS completo.
O documento fornece um guia passo-a-passo para criar e manter um site para um projeto político no WordPress, incluindo escolher um domínio, comprar hospedagem, instalar o WordPress, encontrar e instalar um tema, configurar o tema, e publicar páginas.
Wordpress - Gerenciamento de Blogs e sites - Aula 1Saulo Matias
Este documento apresenta o WordPress como um sistema de gerenciamento de conteúdo (CMS) flexível e gratuito que permite criar blogs e sites de forma fácil. Ele explica o que são blogs, sites e o WordPress, destacando suas principais características como interface personalizável, plugins e facilidade de uso. Também compara o WordPress com outros CMS como Joomla, Drupal e Blogger, e lista vantagens como código aberto, documentação e atualizações frequentes. Por fim, resume os passos para instalação do WordPress.
Publique seus conteúdos na internet e obtenha resultados.
Você já sabe da necessidade de uma estratégia de marketing para a publicação de conteúdo bem sucedida, pra isso você precisa ter um blog para a criação dos seus conteúdos. Vamos colocar a mão na massa e mostrar a vocês como se faz isso. Mais antes disso vamos para a próxima etapa, aprender o é CMS e WordPress.
Você está querendo traduzir seu site, tema, plugin ou até mesmo só procurando uma forma de contribuir para a comunidade?
Aprenda como funcionam e porque as traduções são tão importantes no mundo do WordPress!
Instalando o WordPress local em qualquer sistema operacional - Anyssa Ferreir...Anyssa Ferreira
Aprenda o que é o WordPress e como instalar o CMS em seu computador para desenvolver sites sem precisar de acesso à internet. Workshop apresentado na bancada da comunidade Software Livre da Campus Party Brasil 2018
1) O documento apresenta uma introdução ao CSS (Cascading Style Sheets), explicando que ele permite criar layouts de websites de forma diferente do HTML e de forma mais eficiente.
2) É dada orientação sobre os softwares e navegadores necessários para acompanhar o tutorial, sendo recomendado um editor de texto simples.
3) O tutorial ensinará propriedades CSS como cores, imagens de fundo e posicionamento ao longo de três lições.
Semelhante a Como desenvolver um tema wordpress de A a Z (20)
Conferência Goiás I Prevenção à fraude em negócios B2B e B2C: boas práticas e...E-Commerce Brasil
Pedro Lamim
Head de Prevenção à Fraude
Pagar.me
Prevenção à fraude em negócios B2B e B2C: boas práticas e as principais tendências emergentes.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I As tendências para logística em 2024 e o impacto positivo...E-Commerce Brasil
Camila Suziane Rezende
Agente Comercial Regional
Total Express,
Renata Bettoni Abrenhosa
Agente Comercial Regional
Total Express
As tendências para logística em 2024 e o impacto positivo que ela pode ter no seu negócio.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Como uma boa experiência na logística reversa pode impact...E-Commerce Brasil
Diogo Inoue
Diretor de Operações OOH
Jadlog Logística.
Como uma boa experiência na logística reversa pode impactar na conversão do seu e-commerce?
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Moda e E-commerce: transformando a experiência do consumi...E-Commerce Brasil
Carolina Soares
Sales Manager
DHL Suppy Chain.
Moda e E-commerce: transformando a experiência do consumidor com estratégias de fulfillment logístico.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I E-commerce Inteligente: o papel crucial da maturidade dig...E-Commerce Brasil
Erick Melo
Co-founder/CCO
WebJump
E-commerce Inteligente: o papel crucial da maturidade digital em uma estratégia de personalização em escala.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
MANUAL DO REVENDEDOR TEGG TELECOM - O 5G QUE PAGA VOCÊEMERSON BRITO
Tegg Telecom – 5G que paga você!
Essa é a proposta da Tegg Telecom. Fundado há quase 3 anos, o Grupo Tegg criou sua própria operadora de telefonia móvel, a Tegg Telecom, com a inovadora promessa de pagar aos usuários por utilizarem o serviço de telefonia 5G. Além disso, a Tegg oferece planos mensais a partir de R$ 14,90, sem contratos de fidelidade.
A Tegg é uma Startup Mobitech que chegou para revolucionar a telefonia móvel! 🤳🏻 Planos sem fidelidade.
⬇️ Saiba Mais!
Para Mais Informações me chame no WhatsApp
(67)99114-7996 - EMERSON BRITO
A linha Tegg é o nosso serviço de telefonia móvel. Assim como tudo na Tegg, foi desenhada para todos que desejam um serviço transparente, simples e sem surpresas na fatura. Ela foi feita para redefinir a maneira como você consome a telefonia. Não gera fidelidade, nem multa em caso de cancelamento.
Tenha uma Renda Extra e desenvolva seu próprio Negócio.
Acesse agora e venda chips para qualquer lugar do Brasil!
Assuma o Controle do Seu Futuro Agora!
.
.
Revenda Telefonia Móvel da Empresa TEGG TELECOM
Trabalhe no Conforto de Sua Casa
Inicie seu negócio Online Agora
Compartilhe com Seus Amigos
Não sabe como começar?
Me chama no zap que te explico.
盧 67 99114.7996
Conferência Goiás I Uma experiência excelente começa quando ela ainda nem seq...E-Commerce Brasil
Carolina Ramos de Campos
Gerente de Relacionamento com o Seller
Americanas S.A
Uma experiência excelente começa quando ela ainda nem sequer foi imaginada!
https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Fraudes no centro-oeste em 2023E-Commerce Brasil
Cristiane Cajado
Coordenadora de Customer Success
ClearSale
Fraudes no centro-oeste em 2023.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Estratégias de aquisição e fidelização de clientes e opor...E-Commerce Brasil
Thiago Vicente
VP Comercial
CRM BONUS
Estratégias de aquisição e fidelização de clientes e oportunidades com I.A.
Saiba mais em:https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Conteúdo que vende: Estratégias para o aumento de convers...E-Commerce Brasil
Maurici Junior
Gerente de Conteúdo
Magalu
Conteúdo que vende: Estratégias para o aumento de conversão para marketplace.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Perspectivas do Pix 2024: novidades e impactos no varejo ...E-Commerce Brasil
Thiago Nunes
Key Account Manager - Especialista em Digital Payments
Vindi
Perspectivas do Pix 2024: novidades e impactos no varejo e na indústria.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Os impactos da digitalização do Atacarejo no Brasil.E-Commerce Brasil
Tiago Campos
Diretor de Novos Negócios
Uappi
Os impactos da digitalização do Atacarejo no Brasil.
Saiba mais em: https://eventos2.ecommercebrasil.com.br/conferencia-goias/
Conferência Goiás I Os impactos da digitalização do Atacarejo no Brasil.
Como desenvolver um tema wordpress de A a Z
1. Parte 1
FERRAMENTAS DE DESENVOLVIMENTO
Antes de começar a construir nosso template WordPress, é necessário que tenhamos todas as nossas
ferramentas à mão. Neste primeiro artigo, iremos analisar e recomendar as melhores ferramentas para
construir um ambiente de trabalho e de testes do qual você ficará orgulhoso.
SERVIDOR DE TESTES LOCAIS: XAMP OU MAMP
A melhor forma de desenvolver seu novo template WordPress é fora da internet, a partir do seu próprio
computador. No entanto, para o fazer você precisa tornar seu computador num “servidor local”,
aproximando-o ao máximo a um servidor de internet (Apache, MySQL e PHP). Isto significa que você
poderá instalar o WordPress em seu próprio computador.
Instalar estes softwares de servidor pode ser uma tarefa relativamente complicada, mas felizmente
existem alguns softwares automáticos que realizam essas tarefas automaticamente por nós. Se você tiver
um computador com Windows, instale o XAMP. Se por ventura tiver um computador Mac instale o MAMP.
WORDPRESS
Obviamente, iremos necessitar de descarregar a última versão do WordPress e instalá-la corretamente em
nosso servidor de testes. Se instalou o XAMP e por ventura tiver dúvidas a instalar o WordPress
localmente, siga estas instruções. Se estiver a usar o MAMP siga estas instruções.
CONTEÚDO DE TESTES
A sua instalação do WordPress irá necessitar de conteúdo para testes. No seu painel de administração, vá
no menu Ferramentas > Importar e escolha a opção WordPress da listagem. Agora apenas iremos
necessitar de informação em formato WXR.
Eis algumas opções do mercado:
The Theme Development Checklist test data
The Sandbox Dummy Content
Obviamente que estas opções de conteúdo de testes têm os seus prós e contras. Obviamente que quanto
mais conteúdo você conseguir importar melhor. Dessa forma você garante que nenhuma das
funcionalidades é esquecida. Se desejar, poderá também criar o seu próprio conteúdo de testes. Quando
achar que está tudo OK, use a navegação por postagens para pesquisar através de cada um dos posts que
acabou de importar/criar. Verifique também os arquivos mensais e anuais, bem como os arquivos de
categoria. Se faltar alguma coisa, poderá sempre tentar adicionar.
UM EDITOR DE TEXTO
Você não necessita de nenhum software visualmente atrativo e com gráficos para criar um template
WordPress. Você precisa apenas de um Editor de Texto. Mas como em tudo na vida, uns são melhores que
os outros. Para Windows, você pode experimentar o Notepad++. É grátis e open-source. Para Mac,
recomendo vivamente o Text Wrangler que é o editor que uso, embora o Smultron seja muito bom
também. Se necessitar de um cliente de FTP de qualidade, tem à escolha entre o FileZilla e o Cyberduck.
2. FIREFOX
Obviamente, você pode usar qualquer browser para desenvolvimento web, mas aquele que
recomendamos vivamente é sem dúvida o Firefox. Especial com dois plugins que tornam a sua vida bem
mais fácil quando se pretende desenvolver templates WordPress. O plugin Web Developer adiciona uma
toolbar que lhe oferece uma série de funcionalidades para inspeccionar e remover erros de código do seu
template, desde desabilitar todos os estilos CSS à validação local do HTML. O plugin Firebug é também ele
indispensável. Com o Firebug ligado você pode clicar em qualquer elemento da janela de seu browser e ver
como ele se parece ao nível de código fonte e a forma como está sendo afectado pelo CSS.
HTML E CSS
Se você dominar relativamente bem ou pelo menos tiver conhecimentos de HTML e CSS, tanto melhor.
Recomendo-lhe também a leitura deste tutorial para aprender HTML5. Embora o Tutorial não lhe ensine
tudo aquilo que irá precisar, tanto a nível de HTML como de CSS, é sempre uma boa primeira abordagem
PHP
Relativamente ao PHP, é também ele importante no desenvolvimento de um template wordpress. No
entanto iremos criando a nossa série de artigos de forma didática para que não tenha qualquer tipo de
problema no desenvolvimento de seu template WordPress. Para conseguir realizar esta série de artigos
com eficiência, você apenas necessita do básico do PHP, embora estejamos cá para ajudá-lo em tudo o que
for necessário.
Parte 2
CRIANDO A ESTRUTURA HTML DO TEMPLATE WORDPRESS
A estrutura HTML do seu Template WordPress é fundamental para o trabalho que iremos desenvolver ao
longo das próximas sessões. Tendo em conta que consideramos que já tem o seu ambiente de trabalho
criado e pronto a trabalhar, vamos iniciar-nos no desenvolvimento da estrutura HTML do Template
WordPress.
OS OBJETIVOS DE QUALQUER ESTRUTURA HTML
Quando você pretende criar/codar um determinado website você deverá ter em mente 2 objetivos: pouco
código e código significativo. Isso é, usando o mínimo de marcações (HTML tags) possível e ao mesmo
tempo ter a certeza de que essas marcações são significativas, usando classes semânticas e nomes de ID
que apontam para o conteúdo (class=”widget-area” ao invés de class=”sidebar-left”).
Agora, quando iniciarmos a programação do Template WordPress (ou qualquer outro template para outro
CMS) é necessário existir um equilíbrio entre pouco código, com muito pouca estrutura, incluindo
elementos div desnecessários, e código que seja significativo e importante.
Você provavelmente já viu a tag div no passado se por ventura olhou para o código de um site ou de um
template WordPress. Pense nelas como recipientes para o código HTML — recipientes que são fáceis de
manusear para manipular código HTML com CSS. Obviamente, iremos ter algumas também. Mas não
queremos muitas ou que não façam sentido. E queremos estrutura suficiente — usando a tag div — de
forma a podermos reutilizar o nosso código para múltiplos blogs e layouts. Nós queremos programar algo
que nos possa ser útil no futuro também.
3. ESTRUTURA HTML PARA O SEU TEMPLATE WORDPRESS
Vamos dar uma vista de olhos à estrutura HTML que iremos utilizar para o corpo (body) do nosso Template
WordPress.
<html>
<head>
</head>
<body>
<div id="wrapper" class="hfeed">
<div id="header">
<div id="masthead">
<div id="branding"> </div>
<!– #branding –>
<div id="access"> </div>
<!– #access –>
</div>
<!– #masthead –>
</div>
<!– #header –>
<div id="main">
<div id="container">
<div id="content"> </div>
<!– #content –>
</div>
<!– #container –>
<div id="primary" class="widget-area"> </div>
<!– #primary .widget-area –>
<div id="secondary" class="widget-area"> </div>
<!– #secondary –>
</div>
4. <!– #main –>
<div id="footer">
<div id="colophon">
<div id="site-info"> </div>
<!– #site-info –>
</div>
<!– #colophon –>
</div>
<!– #footer –>
</div>
<!– #wrapper –>
</body>
</html>
Copie e cole este código para o seu editor de texto e guarde-o num local seguro e onde saiba que o volta a
encontrar. Iremos utilizá-lo mais tarde quando construir o ficheiro de estrutura do nosso Template
WordPress. Mas antes de o fazermos, existem algumas coisas importantes a analisar primeiro.
UM PEQUENO GUIA SOBRE O HTML DO SEU TEMPLATE WORDPRESS
Primeiro, o atributo de classe no wrapper (invólucro) intitulado hfeed. A classe hfeed faz parte do esquema
de microformato. Em linguagem simples, isto significa que adicionando a classe hfeed à nossa página, ela
irá dizer a qualquer máquina que leia o nosso site (como por exemplo os robots dos motores de busca ou
outros serviços) que o nosso site publica conteúdo sindicado, como por exemplo artigos/postagens. Você
irá ver uma série de classes deste género à medida que formos avançando.
Na área central do nosso HTML irá reparar que temos duas áreas para widgets que surgem depois da nossa
área de conteúdos. E provavelmente também reparou que o nosso conteúdo está envolvido numa div
container (invólucro). Estes pontos são chave. Isto faz com que o nosso conteúdo seja carregado antes das
barras laterais aos olhos dos motores de busca (e dos leitores) mas usando uma técnica de CSS com
margens negativas poderemos tornar este template num template de 1, 2, ou 3 colunas com pouco código
CSS. Interessante?
Esta estrutura HTML poderá ser utilizada para os seus Templates WordPress futuros e dá-lhe a
oportunidade de criar coisas bem interessantes com CSS.
5. Parte 3
ESTRUTURA DO TEMPLATE E DIRETÓRIO
Enquanto a grande maioria dos templates minimalistas para WordPress apenas necessitam de um ficheiro
index.php e um ficheiro style.css, a grande maioria dos Templates WordPress necessitam de algo um
pouco mais sólido.
O nosso template minimalista irá incluir um total de 6 ficheiros. Comece por criar uma pasta do tipo wp-
content/themes/ para o seu template — neste tutorial iremos utilizar a nomenclatura “seu-template” mas
ele pode tomar o nome que você desejar — e crie também os seguintes ficheiros no seu diretório (não se
preocupe que eles ficarão em branco até aos próximos passos).
• index.php
• header.php
• sidebar.php
• footer.php
• functions.php
• style.css
Agora, vamos abrir o último ficheiro que criámos, o style.css, num editor de texto. A primeira coisa que
necessitamos fazer é adicionar uma secção no topo do ficheiro na qual iremos colocar os comentários do
CSS (algo do tipo: /* e */). É aqui que necessitamos de colocar a informação que diz ao WordPress onde
está seu ficheiro de estilos do seu template. Sem isso, seu template também não irá aparecer no painel de
administração do seu blog WordPress.
/*
Theme Name: Seu Template
Theme URI: http://exemplo.com/exemplo/
Description: Um Template WordPress otimizado para buscadores.
Author: Escola WordPress
Author URI: http://www.escolawp.com/
Version: 1.0
Tags: separadas por vírgulas para identificar seu template
.
Your theme can be your copyrighted work.
6. Like WordPress, this work is released under GNU General Public License, version 2 (GPL).
http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
.
*/
Algo a notar: uma grande parte disto é opcional. Sério, você precisa apenas do nome do Template. Mas se
alguma vez tiver como intenção lançar seu template ao público, ou está a desenvolver um template para
alguém, você provavelmente irá desejar ter toda a informação. Assim que tiver isso realizado, poderá
ativar seu template e começar a correr a versão de testes. E tcharam, um template branquinho! Agora é
que as coisas vão começar a aquecer!
CONSTRUINDO A SUA ESTRUTURA HTML
Agora é a altura em que vamos utilizar a nossa estrutura HTML criada na segunda parte deste tutorial. Mas
primeiro uma mini-lição sobre WordPress e Templates. O WordPress necessita apenas de 1 ficheiro de
template, o index.php. Nós podemos, e iremos adicionar uma série de templates que podem ser usadas
além do index.php em determinadas situações (artigos singulares, páginas de categorias, etc.), mas no
início, o index.php é tudo o que precisamos.
Agora, o index.php e todas as suas irmãs e irmãos (que iremos usar também) criam as páginas que vemos
em nosso browser. Estes são ficheiros com HTML e PHP mas no final de contas servem para criar páginas
visuais.
Vamos imaginar as páginas web como histórias, algo com um princípio, um meio, e um fim. Quando
escrevemos o nosso ficheiro index.php (e mais tarde o single.php, category.php, etc.) iremos concentrar-
nos apenas no meio. Mas! Iremos chamá-lo tanto no princípio como no fim. É provável que estejamos
constantemente refazendo o nosso meio mas ao mesmo tempo estaremos criando o princípio e fim em
simultâneo.
HEADER.PHP E FOOTER.PHP
Agarre na estrutura HTML que construímos na aula anterior e copie tudo incluindo a div <div id="main">
no seu header.php e guarde-o. No final deverá ficar algo deste tipo:
<html>
<head>
</head>
<body>
<div id="wrapper" class="hfeed">
<div id="header">
<div id="masthead">
7. <div id="branding"> </div>
<!– #branding –>
<div id="access"> </div>
<!– #access –>
</div>
<!– #masthead –>
</div>
<!– #header –>
<div id="main">
Agora, copie tudo o que está depois, incluindo a div </div><!-- #main --> para o seu ficheiro footer.php. Ele
deverá ficar algo deste género:
</div>
<!– #main –>
<div id="footer">
<div id="colophon">
<div id="site-info"> </div>
<!– #site-info –>
</div>
<!– #colophon –>
</div>
<!– #footer –>
</div>
<!– #wrapper –>
</body></html>
INDEX.PHP
Aposto que entretanto já sabe o que vamos fazer de seguida. Copie toda a estrutura HTML do meio onde
está incluída a div #main para o seu ficheiro index.php. Ele deverá ficar algo deste género:
<div id="container">
8. <div id="content"> </div>
<!– #content –>
</div>
<!– #container –>
<div id="primary" class="widget-area"> </div>
<!– #primary .widget-area –>
<div id="secondary" class="widget-area"> </div>
<!– #secondary –>
Com apenas duas adições pequenas teremos um Template WordPress perfeitamente inválido mas estamos
certamente no bom caminho. Temos também de chamar o cabeçalho (header.php) e o rodapé
(footer.php) no nosso template.
No topo do ficheiro index.php, antes de todo o código lá existente, adiciona a seguinte tag de template.
<?php get_header(); ?>
Parece-nos perfeitamente óbvio o que esta tag faz. Ela puxa e carrega o cabeçalho do site. Mas já que
estamos aqui, aproveite para olhar melhor para esta tag PHP. Gostava que percebesse algumas coisas.
Primeiro, a nossa função PHP é a chamada — get_header()— e começa com <?php e termina com ?>.
Segundo, embora a nossa chamada seja muito curta (apenas uma linha) ela termina com um ponto e
vírgula. Pequeno, mas muito importante.
Quer adivinhar qual a função que vamos colocar agora no fundo do nosso ficheiro index.php?
<?php get_footer(); ?>
Isso mesmo! Agora temos o nosso ficheiro principal que o WordPress estava procurando, o nosso
index.php. Ele contém todos miolos do meio, e também um princípio e um fim. Recarregue sua página no
browser e verifique o código fonte (Ver > Código-Fonte da Página, no Firefox). Aí está o seu código!
Estamos cada vez mais próximos de criar nosso Template WordPress! Fique connosco e participe!
Parte 4
CONSTRUINDO O CABEÇALHO (HEADER.PHP) DO TEMPLATE WORDPRESS
Nesta lição iremos abordar a construção de nosso ficheiro header.php e encontrar a forma correta de
validar nosso template com um Doctype HTML. Esta lição está recheada de código PHP mas não se assuste
que iremos explicar tudo passo-a-passo para que possa compreender todas as funcionalidades. Iremos
introduzir também dois truques de otimização para buscadores ao mesmo tempo que vamos procurando
construir e melhor nosso ficheiro functions.php.
9. A SECÇÃO “HEAD”
Neste momento seu template WordPress em branco é inválido. Isso acontece porque ele não tem um
Doctype definido, dizendo ao browser como interpretar o HTML que ele está lendo. Iremos usar um
XHTML Transitional Doctype para validar nosso template. Existem outras opções disponíveis, mas um
XHTML transitional é certamente o melhor para um template WordPress.
Abra seu ficheiro header.php criado na lição anterior e cole lá dentro o seguinte código, antes de todo o
código que já lá se encontra.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Vamos adicionar também alguns atributos à nossa tag HTML que irão tornar o nosso tipo de página mais
aparente e concreto para os browsers. Troque a tag <html> no seu ficheiro header.php com a seguinte
linha de código.
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
Agora vamos avançar para dentro da nossa secção <head> de nosso template WordPress. A secção <head>
contém a meta-informação sobre nossa página web. Informação típica como o título do documento que se
consegue ver e ler no cabeçalho de nosso browser (e nos resultados de buscadores), e ainda links para
folhas de estilos e RSS feeds.
Mas primeiro abra seu ficheiro functions.php. Vamos-lhe adicionar uma função para nos ajudar em alguns
aspectos, especialmente quando estivermos para criar nosso título de documento. Ela vai-nos dar um
número de página que poderemos adicionar ao título.
Inicie seu ficheiro functions.php com:
<?php
e 2 linhas abaixo (gostamos de deixar algumas linhas de separação nas funções) cole as seguintes 2 funções
PHP:
// Tornar o template disponível para tradução
// A tradução pode ser feita em /languages/
load_theme_textdomain( 'your-theme', TEMPLATEPATH . '/languages' );
$locale = get_locale();
$locale_file = TEMPLATEPATH . "/languages/$locale.php";
if ( is_readable($locale_file) )
require_once($locale_file);
// Puxar o número de página
function get_page_number() {
10. if ( get_query_var('paged') ) {
print ' | ' . __( 'Page ' , 'seu-template') . get_query_var('paged');
}
} // end get_page_number
A primeira função diz ao WordPress que queremos que nosso template esteja disponível para tradução e
que os ficheiros de tradução podem ser encontrados na diretoria do template, na pasta “languages”. Se
você vai criar um template WordPress, é importante que você torne seu template aberto a traduções.
Você nunca sabe quando é que alguém irá necessitar de traduzir seu template para outra linguagem.
Na nossa função seguinte, get_the_page_number(), você irá ver algum texto que pode ser traduzido. Algo
deste género:
__( 'Page ' , 'your-theme')
O texto preparado para tradução é o “Page “ seguido do nome de diretório do nosso template; neste caso,
“seu-template”. Esta opção de tradução é relativamente simples de implementar, mas existem muitas
outras formas de o fazer. Iremos analisar isso mais à frente nesta série de artigos.
Consegue adivinhar o que a função get_page_number() está ali fazendo? Se você analisar bem essa função,
você irá perceber que estamos a usar um “if” para verificar se estamos numa página numerada ou não.
Isso acontece quando clicamos em “older posts” ou postagens mais antigas, em templates WordPress. Se
estivermos numa página numerada, esta função mostra uma barra separadora e o número de página.
Se você está começando a tentar compreender PHP pelas primeiras vezes, então queremos chamá-lo à
atenção para um outro aspecto importante. Tudo aquilo que está depois do duplo travessão “//” é
ignorado no código e usado apenas como comentário, ou seja, usando dois travessões desse tipo, você
pode deixar imensos comentários em seu código para perceber o que está programando e o que faz cada
função. Você irá ver isso muitas vezes.
Bem, voltando à nossa secção <head> de nosso ficheiro header.php. Troque as tags <head></head> pelo
seguinte código:
<head profile="http://gmpg.org/xfn/11">
<title><?php
if ( is_single() ) { single_post_title(); }
elseif ( is_home() || is_front_page() ) { bloginfo('name'); print ' | '; bloginfo('description');
get_page_number(); }
elseif ( is_page() ) { single_post_title(''); }
elseif ( is_search() ) { bloginfo('name'); print ' | Search results for ' . wp_specialchars($s);
get_page_number(); }
elseif ( is_404() ) { bloginfo('name'); print ' | Not Found'; }
else { bloginfo('name'); wp_title('|'); get_page_number(); }
11. ?></title>
<meta http-equiv="content-type" content="<?php bloginfo('html_type'); ?>; charset=<?php
bloginfo('charset'); ?>" />
<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" />
<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>
<?php wp_head(); ?>
<link rel="alternate" type="application/rss+xml" href="<?php bloginfo('rss2_url'); ?>" title="<?php
printf( __( '%s latest posts', 'your-theme' ), wp_specialchars( get_bloginfo('name'), 1 ) ); ?>" />
<link rel="alternate" type="application/rss+xml" href="<?php bloginfo('comments_rss2_url') ?>"
title="<?php printf( __( '%s latest comments', 'your-theme' ), wp_specialchars( get_bloginfo('name'), 1 )
); ?>" />
<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />
</head>
Neste código realizamos uma série de tarefas, nomeadamente meta-informação sobre o conteúdo de
nossa página, seguido de um link para a nossa folha de estilos, depois uma chamada de um script para
usarmos comentários em forma de árvore quando criarmos o nosso sistemas de comentários, um truque
para plugins e outras coisas relacionadas com o WordPress e por fim um link para nossos RSS feeds e
pingbacks.
Incluímos também uma title tag otimizada para motores de busca que mostra apenas o título da postagem
em postagens simples e páginas.
A SECÇÃO “HEADER”
Agora iremos acrescentar informação sobre o título de nosso blog, que irá funcionar como um link para a
nossa homepage, uma descrição de nosso blog, e por fim um menu.
No ficheiro header.php desça até à div #branding. É aqui que iremos acrescentar nosso título e descrição
do blog. Mas iremos fazer algo um pouco diferente da maioria dos templates wordpress.
Você encontra em muitos templates wordpress código que diz aos buscadores que o mais importante de
tudo é o título do blog em cada uma das páginas e postagens desse mesmo blog. Essas templates fazem
isso usando tags h1; uma tag que diz “isto é o que esta página tem de importante”. No entanto, aquilo que
é mais importante nesta página de nosso blog, por exemplo, não é “Escola WordPress” mas sim “Como
criar um Template WordPress – Parte IV”. Esta é a razão desta postagem e o que ela realmente trata.
Iremos usar as tags condicionais do WordPress e algum código HTML para criar nosso título e descrição do
blog, com o intuito de fazermos aquilo que são as boas práticas. Vejamos então como esse código se
apresenta:
12. <div id="branding">
<div id="blog-title"><span><a href="<?php bloginfo( 'url' ) ?>/" title="<?php bloginfo( 'name' ) ?>"
rel="home"><?php bloginfo( 'name' ) ?></a></span></div>
<?php if ( is_home() || is_front_page() ) { ?>
<h1 id="blog-description"><?php bloginfo( 'description' ) ?></h1>
<?php } else { ?>
<div id="blog-description"><?php bloginfo( 'description' ) ?></div>
<?php } ?>
</div><!– #branding –>
Portanto, o texto âncora do título de nosso blog é definido usando uma tag div. A descrição de nosso blog
é criada usando uma declaração “if” em PHP e algumas tags condicionais do WordPress.
Para iniciantes, esta é uma boa altura para olhar um pouco para trás e tentar compreender como as coisas
estão sendo criadas e funcionando. No código anterior, estamos usando uma tag WordPress chamada
bloginfo(). Poderá ver que a estamos usando para puxar o URL de nosso blog WordPress, o nome de nosso
blog, e a descrição do mesmo. Ele puxa essa informação e a mostra em seu template. Compreendendo
isto, você compreende todos os templates WordPress. Nós pegamos uma estrutura HTML e chamamos
uma tag WordPress com PHP para realizar essa tarefa. Simples. É tudo uma questão de você se habituar a
ver tags de templates WordPress juntamente com declarações “if” e alguns ciclos de PHP.
Agora desça para sua div #access. Iremos colocar um link para pular para que os usuários não tenha de
estar visualizando o nosso menu ou cabeçalho e possam pular diretamente para os conteúdos.
<div class="skip-link"><a href="#content" title="<?php _e( 'Skip to content', 'seu-template' ) ?>"><?php
_e( 'Skip to content', 'seu-template' ) ?></a></div>
e iremos adicionar o nosso menu de página, usando apenas uma tag wordpress, com apenas 1 argumento:
<?php wp_page_menu( 'sort_column=menu_order' ); ?>
Fácil, correto? Portanto, sua div #access deverá parecer-se com isto:
<div id="access">
<div class="skip-link"><a href="#content" title="<?php _e( 'Skip to content', 'seu-template' )
?>"><?php _e( 'Skip to content', 'seu-template' ) ?></a></div>
<?php wp_page_menu( 'sort_column=menu_order' ); ?>
</div><!– #access –>
Está feito! O seu template de cabeçalho WordPress está programado e otimizado corretamente para
buscadores!
13. Parte 5
CONSTRUINDO O INDEX (INDEX.PHP) DO TEMPLATE WORDPRESS
O ficheiro Index.php é provavelmente o ficheiro mais crucial de todo o seu template WordPress. Não
apenas porque o WordPress necessita dele no caso de você não estar usando nenhuma página irmã (como
as páginas, category.php ou tag.php) mas porque tendo em conta o trabalho que estamos desenvolvendo,
conseguir criar este ficheiro da forma mais correta, irá ajudar-nos a construir todos os outros ficheiros mais
rapidamente (excepto o ficheiro de comentários que é sempre muito complicado de programar).
O CICLO
Embora o ciclo esteja a meio do seu ficheiro, de uma forma metafórica, o index.php inicia e termina com O
Ciclo. Sem ele você não tem nada. Vejamos como ele se parece.
<?php while ( have_posts() ) : the_post() ?>
<?php endwhile; ?>
Muito simples mesmo. Embora você tenha postagens em seu banco de dados, o seu template irá correr
um ciclo por entre eles e por cada um, realizar uma determinada tarefa. A parte do “realizar uma tarefa” é
sem dúvida a mais complexa de todas. Mas ainda assim, poderemos torná-la simples e acessível.
Experimente este ciclo para começar e ao longo dos artigos iremos trabalhar em cima dele. Coloque esse
código dentro da sua div #content em seu ficheiro index.php.
<?php while ( have_posts() ) : the_post() ?>
<?php the_content(); ?>
<?php endwhile; ?>
O que é que você obtém com esse código? Todas as suas postagens numa grande pilha. Mas poderemos
tornar isso diferente.
<ul>
<?php while ( have_posts() ) : the_post() ?>
<li>
<?php the_excerpt(); ?>
</li>
<?php endwhile; ?>
</ul>
Conseguiu perceber o que fizemos aqui? Agora você ficou com uma lista não ordenada de todos os
excertos de suas postagens. (Agora também já consegue perceber o que as funções the_content() e
the_excerpt() fazem!)
14. Basicamente, você cria um ciclo (inicia com while e termina com endwhile) e coloca algumas coisas dentro
dele — coisas como por exemplo tags de template WordPress que puxam informação de suas postagens
que se encontram dentro do ciclo, tal como a tag de template bloginfo() puxa a informação das suas
opções do WordPress, como vimos no último artigo.
Agora, vamos criar um ciclo realmente fantástico! Vamos iniciar com a nossa versão básica. Mas iremos
fazer com que ela seja compatível com a Tag More e a Tag Next Page. Iremos colocá-lo também numa Div
própria e fazer com que o browser saiba que isso é o conteúdo de suas postagens usando a classe de
micro-formato “entry-content”.
<div class="entry-content">
<?php the_content( __( 'Continue reading <span class="meta-nav">»</span>', 'your-theme' ) ); ?>
<?php wp_link_pages('before=<div class="page-link">' . __( 'Pages:', 'your-theme' ) . '&after=</div>') ?>
</div><!– .entry-content –>
E o título da postagem? Isso é muito simples também. Iremos usar a tag the_title() para puxar o título da
postagem e envolvê-lo numa tag <a> que linke diretamente para o the_permalink() (esse é o link
permanente para qualquer postagem). Iremos adicionar também um atributo para títulos e outro micro-
formato (bookmark) que diz ao browser ou ao buscador (ex.: Google) que isto é um link permanente para
um artigo. Tente colocar este código por baixo de sua div .entry-content.
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( __('Permalink to %s',
'your-theme'), the_title_attribute('echo=0') ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
Agora é necessário puxar a informação adicional sobre a sua postagem: quem escreveu o artigo, a data em
que foi publicado, a categoria onde foi inserido, tags, links para comentários, etc. Gostaria de quebrar esta
fase em duas fases: as coisas relacionadas com meta dados (autor e data de publicação) que colocamos
antes do conteúdo da postagem, e as coisas relacionadas com utilidade (categorias, tags e link para
comentários) que colocamos depois do conteúdo. E ambas as fases irão colocar a sua postagem dentro de
sua própria div junto com o título.
Vamos dar uma olhada a todo o ciclo já programado. Inseri alguns comentários no PHP para o ajudar a
compreender melhor o código.
<?php /* O Ciclo — com comentários! */ ?>
<?php while ( have_posts() ) : the_post() ?>
<?php /* Criando uma div com um ID único graças ao the_ID() e classes semânticas com o post_class() */
?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php /* um título h2 */ ?>
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( __('Permalink to %s',
'your-theme'), the_title_attribute('echo=0') ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
16. <?php /* Encerrar a div e terminar o ciclo com endwhile */ ?>
<?php endwhile; ?>
NAVEGAÇÃO
Agora necessitamos de criar uma forma de navegarmos para outras postagens. Iremos criar isto usando 2
tags do WordPress: next_posts_link() e previous_posts_link(). Estas duas funções … não fazem aquilo que
você julga que fazem.
Tal como tudo o que está no index.php, a navegação de postagens tem de ser criada com alguns cuidados
porque é um código que iremos usar em praticamente todas as páginas de nosso template.
Uma coisa que também gostamos, é colocar a navegação no topo e no final de cada postagem.
Uma coisa que queremos fazer também é esconder a navegação caso não existam outros conteúdos para
navegar. Ou seja, se você não tiver postagens antigas em seu blog, nós não queremos enviar o código de
navegação para o browser. Para o fazer, envolvemos o nosso código da seguinte forma:
<?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
<?php } ?>
O que estamos fazendo é indicando que queremos verificar num dado ciclo, se o número de postagens é
superior a 1. Caso seja afirmativo, a navegação aparece em seu blog.
Eis o código final que você irá necessitar na sua navegação, para o topo e fundo da postagem, ou seja,
antes e depois do ciclo.
<?php /* Navegação para o Topo */ ?>
<?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
<div id="nav-above" class="navigation">
<div class="nav-previous"><?php next_posts_link(__( '<span class="meta-nav">«</span> Older
posts', 'your-theme' )) ?></div>
<div class="nav-next"><?php previous_posts_link(__( 'Newer posts <span class="meta-
nav">»</span>', 'your-theme' )) ?></div>
</div><!– #nav-above –>
<?php } ?>
<?php /* Navegação para o Fundo */ ?>
<?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
<div id="nav-below" class="navigation">
<div class="nav-previous"><?php next_posts_link(__( '<span class="meta-nav">«</span> Older
posts', 'your-theme' )) ?></div>
17. <div class="nav-next"><?php previous_posts_link(__( 'Newer posts <span class="meta-
nav">»</span>', 'your-theme' )) ?></div>
</div><!– #nav-below –>
<?php } ?>
E agora uma última coisa que vamos fazer em nosso index.php. Nas próximas postagens iremos analisar
como trabalhar com ele, mas para já vamos apenas colocar esta nova função antes da nossa get_footer().
<?php get_sidebar(); ?>
Parte 6
CONSTRUINDO O SINGLE POST, ANEXOS E PÁGINA DE ERRO 404
Depois de termos criado um template para nosso index.php onde aparecem todas as postagens de nosso
blog, é altura de começarmos a criar as páginas individuais para cada tipo de conteúdo. O index é apenas a
homepage de seu blog, pelo que é necessário criarmos também as páginas individuais das postagens
(single post), os anexos de postagens (post attachments) e também a página de erro 404 que surge quando
seus usuários não encontram os seus conteúdos.
O TEMPLATE PARA OS TEMPLATES
A estrutura do ficheiro single.php (e praticamente todos os outros templates de páginas que iremos criar)
é muito parecido com o ficheiro index.php. De facto, você poderá olhar para ele como o template para os
templates.
<?php get_header(); ?>
<div id="container">
<div id="content">
<div id="nav-above" class="navigation">
</div><!– #nav-above –>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
</div><!– #post-<?php the_ID(); ?> –>
<div id="nav-below" class="navigation">
</div><!– #nav-below –>
</div><!– #content –>
</div><!– #container –>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
18. No entanto irão existir diferenças bastante notáveis. Começando com as funções the_post() e
comments_template().
Iremos chamar a função the_post() perto do topo de nossa página logo após a abertura da “div content” e
antes da navegação. Não iremos necessitar de um ciclo neste template, uma vez que o WordPress sabe
qual a postagem que estamos procurando através da função the_permalink().
E tendo em consideração que este é um single post, iremos necessitar também da função
comments_template(). E porque iremos separar nossos comentários dos trackbacks quando
programarmos nosso ficheiro comments.php, iremos necessitar do seguinte código:
<?php comments_template('', true); ?>
A função comments_template() deverá ficar antes de encerrarmos nossa div #content logo depois da
navegação.
NAVEGAÇÃO DO SINGLE POST
Ao invés de usarmos as funções next_posts_link() e previous_posts_link() iremos usar as funções
previous_post_link() e next_post_link(). Elas fazem precisamente aquilo que você está pensando que
fazem.
<div id="nav-above" class="navigation">
<div class="nav-previous"><?php previous_post_link( '%link', '<span class="meta-nav">«</span>
%title' ) ?></div>
<div class="nav-next"><?php next_post_link( '%link', '%title <span class="meta-nav">»</span>' )
?></div>
</div><!– #nav-above –>
<div id="nav-below" class="navigation">
<div class="nav-previous"><?php previous_post_link( '%link', '<span class="meta-nav">«</span>
%title' ) ?></div>
<div class="nav-next"><?php next_post_link( '%link', '%title <span class="meta-nav">»</span>' )
?></div>
</div><!– #nav-below –>
TÍTULO DO SINGLE POST
Se por ventura se lembrar de nossa aula de programação do ficheiro header.php, nós usámos uma
declaração IF para termos caminho livre para definirmos o título de nossos Single Posts. Para tirarmos
vantagem disso neste template e em todos os templates de páginas que iremos criar, vamos envolver
nosso título em tags h1.
<h1 class="entry-title"><?php the_title(); ?></h1>
Você provavelmente reparou que o código de nossos títulos é também ele muito simples. Isso é o
benefício de não termos de linkar para nada ainda.
19. LINKS ÚTEIS DE ENTRADA DO SINGLE POST
Os links úteis de entrada são…complicados. Antes de darmos uma vista de olhos no código, deveremos
começar por pensar porque razão são complicados. Por causa da forma como os comentários funcionam
no WordPress iremos necessitar de ter em conta diversos cenários: comentários e trackbacks ligados;
apenas os trackbacks ligados; apenas os comentários ligados; comentários e trackbacks encerrados. E isso
significa…uma verdadeira confusão de declarações IF.
O código está documentado mas lembre-se de olhar para os blocos de declarações IF e ELSEIF e
certamente que não será complicado para si compreendê-lo.
Da mesma forma, desejamos mostrar o link permanente de nossa postagem aqui para propósitos de
bookmarking e também o RSS Feed para esta postagem singular (single post) — ideal para seus usuários
seguirem conversas específicas.
<div class="entry-utility">
<?php printf( __( 'This entry was posted in %1$s%2$s. Bookmark the <a href="%3$s" title="Permalink
to %4$s" rel="bookmark">permalink</a>. Follow any comments here with the <a href="%5$s"
title="Comments RSS to %4$s" rel="alternate" type="application/rss+xml">RSS feed for this post</a>.',
'seu-template' ),
get_the_category_list(', '),
get_the_tag_list( __( ' and tagged ', 'seu-template' ), ', ', '' ),
get_permalink(),
the_title_attribute('echo=0'),
comments_rss() ) ?>
<?php if ( ('open' == $post->comment_status) && ('open' == $post->ping_status) ) : // Comments and
trackbacks open ?>
<?php printf( __( '<a class="comment-link" href="#respond" title="Post a comment">Post a
comment</a> or leave a trackback: <a class="trackback-link" href="%s" title="Trackback URL for your
post" rel="trackback">Trackback URL</a>.', 'seu-template' ), get_trackback_url() ) ?>
<?php elseif ( !('open' == $post->comment_status) && ('open' == $post->ping_status) ) : // Only
trackbacks open ?>
<?php printf( __( 'Comments are closed, but you can leave a trackback: <a class="trackback-link"
href="%s" title="Trackback URL for your post" rel="trackback">Trackback URL</a>.', 'seu-template' ),
get_trackback_url() ) ?>
<?php elseif ( ('open' == $post->comment_status) && !('open' == $post->ping_status) ) : // Only
comments open ?>
<?php _e( 'Trackbacks are closed, but you can <a class="comment-link" href="#respond" title="Post a
comment">post a comment</a>.', 'seu-template' ) ?>
20. <?php elseif ( !('open' == $post->comment_status) && !('open' == $post->ping_status) ) : // Comments
and trackbacks closed ?>
<?php _e( 'Both comments and trackbacks are currently closed.', 'seu-template' ) ?>
<?php endif; ?>
<?php edit_post_link( __( 'Edit', 'seu-template' ), "nttttt<span class="edit-link">", "</span>" ) ?>
</div><!– .entry-utility –>
Não foi assim tão difícil, foi?
CONTEÚDO DO SINGLE POST
Ao contrário do que acontece com o ficheiro index.php, o conteúdo do seu ficheiro single.php é muito
simples de obter. Apenas necessitamos de chamar uma função seguida da função wp_link_pages().
<?php the_content(); ?>
<?php wp_link_pages('before=<div class="page-link">' . __( 'Pages:', 'your-theme' ) . '&after=</div>')
?>
ANEXOS DA POSTAGEM
Nem todos os blogueiros usam os anexos de postagem, mas eles são na verdade muito interessantes.
Quando você adiciona uma imagem a um artigo seu, você está na verdade a anexá-la ao seu artigo. E,
obviamente, você pode anexar muito mais do que apenas imagens. Iremos agora criar um template
attachment.php, mas se você desejar, poderá customizá-lo para suportar vídeos, audio, e aplicações,
criando os templates video.php, audio.php, e application.php por exemplo. Existem muitas formas de você
levar sua criatividade a seus anexos com WordPress.
A forma mais rápida de procedermos aqui é copiando o seu ficheiro single.php, renomeá-lo de
attachment.php, e realizando as seguintes alterações.
Primeiro que tudo, elimine a navegação de topo. Não iremos necessitar dela. Substitua-a pelo título da
página que linka diretamente para o seu artigo parente.
<h1 class="page-title"><a href="<?php echo get_permalink($post->post_parent) ?>" title="<?php printf(
__( 'Return to %s', 'seu-template' ), wp_specialchars( get_the_title($post->post_parent), 1 ) ) ?>"
rev="attachment"><span class="meta-nav">« </span><?php echo get_the_title($post->post_parent)
?></a></h1>
Agora que nosso título de página está envolvido em tags h1, isso significa que o título de nossa postagem
deverá estar envolvido em tags h2.
<h2 class="entry-title"><?php the_title(); ?></h2>
Agora, porque o nosso template de anexos precisa mesmo de mostrar esses anexos, nosso conteúdo
deverá reflectir isso mesmo. E dado que a maioria dos anexos serão imagens, teremos de verificar isso e
garantir que usamos uma declaração IF para esse cenário.
<div class="entry-content">
21. <div class="entry-attachment">
<?php if ( wp_attachment_is_image( $post->id ) ) : $att_image = wp_get_attachment_image_src( $post-
>id, "medium"); ?>
<p class="attachment"><a href="<?php echo wp_get_attachment_url($post->id); ?>" title="<?php
the_title(); ?>" rel="attachment"><img src="<?php echo $att_image[0];?>" width="<?php echo
$att_image[1];?>" height="<?php echo $att_image[2];?>" class="attachment-medium" alt="<?php
$post->post_excerpt; ?>" /></a>
</p>
<?php else : ?>
<a href="<?php echo wp_get_attachment_url($post->ID) ?>" title="<?php echo wp_specialchars(
get_the_title($post->ID), 1 ) ?>" rel="attachment"><?php echo basename($post->guid) ?></a>
<?php endif; ?>
</div>
<div class="entry-caption"><?php if ( !empty($post->post_excerpt) ) the_excerpt() ?></div>
<?php the_content( __( 'Continue reading <span class="meta-nav">»</span>', 'seu-template' ) ); ?>
<?php wp_link_pages('before=<div class="page-link">' . __( 'Pages:', 'seu-template' ) . '&after=</div>')
?>
</div><!– .entry-content –>
Elimine a navegação do fundo que se encontrava no código que você copiou de seu ficheiro single.php, e
seu template attachment.php está pronto!
O TEMPLATE DE ERRO 404
O erro 404 é o código de servidor para “Não consigo encontrar essa página” e é algo que você não deverá
descurar em seu template WordPress. O que acontece quando um link para o seu blog foi mal copiado e
envia usuários para uma página que não existe em seu blog? Isso dá origem a um erro 404. Existem formas
muito criativas de lidar com páginas de erro 404. Se desejar apimentar sua página, veja essas incríveis 45
páginas de erro 404 incríveis e criativas.
Felizmente, o WordPress tem um template para gerir esse erro também. Ele chama-se 404.php. A técnica
que usamos em templates de páginas de erro 404 é muito simples e funcional. Ela simplesmente pede
desculpa e deixa uma caixa de pesquisa para seus usuários poderem procurar por conteúdo em seu blog.
Se desejar um pouco mais de criatividade, veja o exemplo que deixámos em cima.
Agora volte para o seu template dos templates, elimine a navegação e adicione algo como isto ao
conteúdo.
<div id="post-0" class="post error404 not-found">
<h1 class="entry-title"><?php _e( 'Not Found', 'seu-template' ); ?></h1>
22. <div class="entry-content">
<p><?php _e( 'Apologies, but we were unable to find what you were looking for. Perhaps searching
will help.', 'seu-template' ); ?></p>
<?php get_search_form(); ?>
</div><!– .entry-content –>
</div><!– #post-0 –>
Parte 7
CONSTRUINDO O FICHEIRO COMMENTS.PHP
Qualquer desenvolvedor que se preze odeia programar o template de comentários do WordPress. Na
verdade ele poderá tornar-se uma verdadeira confusão. Na versão 2.7, o WordPress introduziu felizmente
uma forma mais fácil de criar templates para comentários — o que na verdade não foi grande ajuda se
você desejar separar seus comentários e trackbacks ou desejar introduzir algumas funcionalidades
customizadas. Continua sendo confuso.
Felizmente para você, tentámos recriar um template de forma mais fácil. Continua confuso, mas ainda
assim mais simples, presumo. Para este tutorial sobre o desenvolvimento do template de comentários,
vamos tentar guiá-lo sobre o que vai acontecer, mostrar-lhe algumas porções de código interessantes e
que você vai necessitar de adicionar ao ficheiro functions.php, e depois então apresentar o código
completo e final. Se tudo correr bem, no final fará sentido.
Vejamos o que irá acontecer neste template.
Prevenir o carregamento de páginas por robots
Verificar se há comentários
Contar o número de comentários e trackbacks (ou pings)
Se existirem comentários, mostrar esses comentários — com navegação para paginação de comentários
Se existirem trackbacks, mostrar os trackbacks
Se os comentários estiverem ligados, mostrar o formulário de “resposta”
Na verdade é muita coisa para um template só, mas penso que conseguiremos explicar-lhe como tudo isso
funciona.
CHAMANDO OS COMENTÁRIOS E TRACKBACKS DE FORMA CUSTOMIZADA
Agora, com o WordPress 2.7 foi lançada a função wp_list_comments() que apresenta uma lista
desordenada de comentários e trackbacks para os seus artigos (em árvore também). Pode ser conveniente
se você assim o desejar. Mas para nós não. Nós queremos comentários em árvore separados dos
trackbacks, e customizados à nossa maneira.
23. Para criar o código do template de comentários vamos dar-lhe algum trabalho. Você irá necessitar de criar
chamadas customizadas para a sua lista de Comentários e Trackbacks. Adicione as seguintes 2 funções ao
seu ficheiro functions.php.
// Chamada customizada de comentários
function custom_comments($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
$GLOBALS['comment_depth'] = $depth;
?>
<li id="comment-<?php comment_ID() ?>" <?php comment_class() ?>>
<div class="comment-author vcard"><?php commenter_link() ?></div>
<div class="comment-meta"><?php printf(__('Posted %1$s at %2$s <span class="meta-
sep">|</span> <a href="%3$s" title="Permalink to this comment">Permalink</a>', 'seu-template'),
get_comment_date(),
get_comment_time(),
'#comment-' . get_comment_ID() );
edit_comment_link(__('Edit', 'seu-template'), ' <span class="meta-sep">|</span> <span
class="edit-link">', '</span>'); ?></div>
<?php if ($comment->comment_approved == '0') _e("ttttt<span class='unapproved'>Your
comment is awaiting moderation.</span>n", 'seu-template') ?>
<div class="comment-content">
<?php comment_text() ?>
</div>
<?php // echo the comment reply link
if($args['type'] == 'all' || get_comment_type() == 'comment') :
comment_reply_link(array_merge($args, array(
'reply_text' => __('Reply','seu-template'),
'login_text' => __('Log in to reply.','seu-template'),
'depth' => $depth,
'before' => '<div class="comment-reply-link">',
'after' => '</div>'
24. )));
endif;
?>
<?php } // end custom_comments
// Chamada customizada para listar trackbacks
function custom_pings($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
?>
<li id="comment-<?php comment_ID() ?>" <?php comment_class() ?>>
<div class="comment-author"><?php printf(__('By %1$s on %2$s at %3$s', 'seu-template'),
get_comment_author_link(),
get_comment_date(),
get_comment_time() );
edit_comment_link(__('Edit', 'seu-template'), ' <span class="meta-sep">|</span> <span
class="edit-link">', '</span>'); ?></div>
<?php if ($comment->comment_approved == '0') _e('ttttt<span class="unapproved">Your
trackback is awaiting moderation.</span>n', 'seu-template') ?>
<div class="comment-content">
<?php comment_text() ?>
</div>
<?php } // end custom_pings
Iremos necessitar também de uma função customizada que o custom_comments() está chamando. Esta
função irá fazer a marcação do gravatar que estamos a usar, mas que ele se enquadre no esquema de
microformato para hcard.
// Produz um avatar compatível com hCard
function commenter_link() {
$commenter = get_comment_author_link();
if ( ereg( '<a[^>]* class=[^>]+>', $commenter ) ) {
$commenter = ereg_replace( '(<a[^>]* class=['"]?)', '1url ' , $commenter );
} else {
25. $commenter = ereg_replace( '(<a )/', '1class="url "' , $commenter );
}
$avatar_email = get_comment_author_email();
$avatar = str_replace( "class='avatar", "class='photo avatar", get_avatar( $avatar_email, 80 ) );
echo $avatar . ' <span class="fn n">' . $commenter . '</span>';
} // end commenter_link
Se você pretende mudar a dimensão original do seu gravatar, troque o valor de 80 na função get_avatar(
$avatar_email, 80 ) ). O valor 80 é a dimensão em pixeis para o seu gravatar.
O TEMPLATE DE COMENTÁRIOS
Vejamos então o template de comentários com algums comentários PHP que o vão ajudar a compreender
melhor as funcionalidades presentes no template.
<?php /* O template de comentários! */ ?>
<div id="comments">
<?php /* Correr algumas verificações para robots artigos protegidos com password */ ?>
<?php
$req = get_option('require_name_email'); // Verifica se os campos são obrigatórios.
if ( 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']) )
die ( 'Please do not load this page directly. Thanks!' );
if ( ! empty($post->post_password) ) :
if ( $_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password ) :
?>
<div class="nopassword"><?php _e('This post is password protected. Enter the password to view
any comments.', 'seu-template') ?></div>
</div><!– .comments –>
<?php
return;
endif;
endif;
?>
26. <?php /* Verificar se há comentários e fazer coisas! */ ?>
<?php if ( have_comments() ) : ?>
<?php /* Contar o número de comentários e trackbacks (ou pings) */
$ping_count = $comment_count = 0;
foreach ( $comments as $comment )
get_comment_type() == "comment" ? ++$comment_count : ++$ping_count;
?>
<?php /* Se existire comentários, mostrar os comentários */ ?>
<?php if ( ! empty($comments_by_type['comment']) ) : ?>
<div id="comments-list" class="comments">
<h3><?php printf($comment_count > 1 ? __('<span>%d</span> Comments', 'seu-template') :
__('<span>One</span> Comment', 'seu-template'), $comment_count) ?></h3>
<?php /* Se existirem comentários suficientes, construir a paginação de comentários */ ?>
<?php $total_pages = get_comment_pages_count(); if ( $total_pages > 1 ) : ?>
<div id="comments-nav-above" class="comments-navigation">
<div class="paginated-comments-links"><?php paginate_comments_links(); ?></div>
</div><!– #comments-nav-above –>
<?php endif; ?>
<?php /* Uma lista ordenada de comentários, custom_comments(), in functions.php */ ?>
<ol>
<?php wp_list_comments('type=comment&callback=custom_comments'); ?>
</ol>
<?php /* Se existirem comentários suficientes, construir a navegação */ ?>
<?php $total_pages = get_comment_pages_count(); if ( $total_pages > 1 ) : ?>
<div id="comments-nav-below" class="comments-navigation">
<div class="paginated-comments-links"><?php paginate_comments_links(); ?></div>
</div><!– #comments-nav-below –>
<?php endif; ?>
27. </div><!– #comments-list .comments –>
<?php endif; /* if ( $comment_count ) */ ?>
<?php /* Se existirem trackbacks(pings), mostrar os trackbacks */ ?>
<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<div id="trackbacks-list" class="comments">
<h3><?php printf($ping_count > 1 ? __('<span>%d</span> Trackbacks', 'seu-template') :
__('<span>One</span> Trackback', 'seu-template'), $ping_count) ?></h3>
<?php /* Uma lista ordenada de trackbacks, custom_pings(), in functions.php */ ?>
<ol>
<?php wp_list_comments('type=pings&callback=custom_pings'); ?>
</ol>
</div><!– #trackbacks-list .comments –>
<?php endif /* if ( $ping_count ) */ ?>
<?php endif /* if ( $comments ) */ ?>
<?php /* Se os comentários estiverem ligados, criar o formulário de resposta */ ?>
<?php if ( 'open' == $post->comment_status ) : ?>
<div id="respond">
<h3><?php comment_form_title( __('Post a Comment', 'seu-template'), __('Post a Reply to %s',
'your-theme') ); ?></h3>
<div id="cancel-comment-reply"><?php cancel_comment_reply_link() ?></div>
<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p id="login-req"><?php printf(__('You must be <a href="%s" title="Log in">logged in</a> to post
a comment.', 'seu-template'),
get_option('siteurl') . '/wp-login.php?redirect_to=' . get_permalink() ) ?></p>
<?php else : ?>
<div class="formcontainer">
<form id="commentform" action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php"
method="post">
<?php if ( $user_ID ) : ?>
29. </div><!– #form-section-comment .form-section –>
<div id="form-allowed-tags" class="form-section">
<p><span><?php _e('You may use these <abbr title="HyperText Markup
Language">HTML</abbr> tags and attributes:', 'seu-template') ?></span> <code><?php echo
allowed_tags(); ?></code></p>
</div>
<?php do_action('comment_form', $post->ID); ?>
<div class="form-submit"><input id="submit" name="submit" type="submit" value="<?php
_e('Post Comment', 'seu-template') ?>" tabindex="7" /><input type="hidden"
name="comment_post_ID" value="<?php echo $id; ?>" /></div>
<?php comment_id_fields(); ?>
<?php /* O código termina aqui. Está feito. Vamos encerrá-lo. */ ?>
</form><!– #commentform –>
</div><!– .formcontainer –>
<?php endif /* if ( get_option('comment_registration') && !$user_ID ) */ ?>
</div><!– #respond –>
<?php endif /* if ( 'open' == $post->comment_status ) */ ?>
</div><!– #comments –>
E está feito! Acaba de criar o seu template de comentários com estilo e alguns pormenores bem
interessantes.
Parte 8
CONSTRUINDO O FICHEIRO DE PESQUISA E DE PÁGINA ESTÁTICA
Os ficheiros de pesquisa e de páginas estáticas são fundamentais em qualquer Template WordPress. E o
melhor de tudo é que são ambos bastante simples de programar. Para ambos estes Templates iremos
começar de novo usando novo template para templates (pode ir buscá-lo a nosso artigo da parte 6).
<?php get_header(); ?>
<div id="container">
<div id="content">
<div id="nav-above" class="navigation">
</div><!– #nav-above –>
30. <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
</div><!– #post-<?php the_ID(); ?> –>
<div id="nav-below" class="navigation">
</div><!– #nav-below –>
</div><!– #content –>
</div><!– #container –>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Mas obviamente, cada um dos ficheiros irá tomar um caminho diferente.
O TEMPLATE DE PESQUISA
No ficheiro search.php iremos reintroduzir o ciclo novamente no nosso Template. Desta vez com uma
declaração IF — para o caso de não termos nenhuma postagem para puxar a partir do ciclo.
Vejamos como este ficheiro irá trabalhar: Se tivermos artigos (IF), ou por outras palavras, se existem
artigos que correspondem ao termo pesquisado, então corremos o ciclo, algo parecido com o que
acontece no index.php, mas se não tivermos artigos (IF) para correr o ciclo, ou, se não tivermos artigos que
correspondam aos termos pesquisados, iremos dar a possibilidade ao usuário de voltar a pesquisar
novamente.
Em termos de código, será algo deste tipo:
<?php get_header(); ?>
<div id="container">
<div id="content">
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post() ?>
<!– this is our loop –>
<?php endwhile; ?>
<?php else : ?>
<!– aqui iremos colocar uma caixa de pesquisa caso não existam artigos –>
<?php endif; ?>
</div><!– #content –>
</div><!– #container –>
31. <?php get_sidebar(); ?>
<?php get_footer(); ?>
Muito simples e direto, certo? Praticamente.
Gostamos de colocar todos os ficheiros indexáveis mais ou menos com a mesma estrutura: Título do
Artigo, Meta, Conteúdo (ou excerto), Links Úteis. Mas quando o WordPress pesquisa por artigos ele
também pesquisa por Páginas, que não necessitam de informações de meta ou links úteis. Portanto, no
nosso ciclo, iremos verificar se estamos a lidar com um artigo ou uma página.
<?php if ( $post->post_type == 'post' ) { ?>
<?php } ?>
Envolva o código nessa declaração IF e ele apenas mostrará conteúdo se estivermos a lidar com um artigo.
Agora que já compreendemos como tudo funciona, aqui está a div #content do nosso template de
pesquisa:
<?php if ( have_posts() ) : ?>
<h1 class="page-title"><?php _e( 'Search Results for: ', 'seu-template' ); ?><span><?php
the_search_query(); ?></span></h1>
<?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
<div id="nav-above" class="navigation">
<div class="nav-previous"><?php next_posts_link(__( '<span class="meta-nav">«</span> Older
posts', 'seu-template' )) ?></div>
<div class="nav-next"><?php previous_posts_link(__( 'Newer posts <span class="meta-
nav">»</span>', 'seu-template' )) ?></div>
</div><!– #nav-above –>
<?php } ?>
<?php while ( have_posts() ) : the_post() ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( __('Permalink to %s',
'your-theme'), the_title_attribute('echo=0') ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<?php if ( $post->post_type == 'post' ) { ?>
<div class="entry-meta">
<span class="meta-prep meta-prep-author"><?php _e('By ', 'seu-template'); ?></span>
<span class="author vcard"><a class="url fn n" href="<?php echo get_author_link( false,
$authordata->ID, $authordata->user_nicename ); ?>" title="<?php printf( __( 'View all posts by %s', 'seu-
33. <div id="nav-below" class="navigation">
<div class="nav-previous"><?php next_posts_link(__( '<span class="meta-nav">«</span> Older
posts', 'seu-template' )) ?></div>
<div class="nav-next"><?php previous_posts_link(__( 'Newer posts <span class="meta-
nav">»</span>', 'seu-template' )) ?></div>
</div><!– #nav-below –>
<?php } ?>
<?php else : ?>
<div id="post-0" class="post no-results not-found">
<h2 class="entry-title"><?php _e( 'Nothing Found', 'seu-template' ) ?></h2>
<div class="entry-content">
<p><?php _e( 'Sorry, but nothing matched your search criteria. Please try again with some different
keywords.', 'your-theme' ); ?></p>
<?php get_search_form(); ?>
</div><!– .entry-content –>
</div>
<?php endif; ?>
O TEMPLATE DE PÁGINA
Você certamente sabe para que serve um template de página. O WordPress olha para ele como um artigo
não organizado de forma cronológica. E nós pensamos nele como uma página, simples. Mas
maioritariamente, é definido pelas coisas que não tem: todas as tralhas e panóplias que um artigo
normalmente tem (links úteis, meta, etc.).
Exceptuando os comentários. Por vezes certas páginas têm comentários. Nós não gostamos de
comentários em páginas. Se quiser colocar comentários numa página, pode adicionar um campo
personalizado (custom field) com nome e valor “comments”. Muito simples mesmo.
Eis o que você precisa para criar um template de página perfeito:
<?php get_header(); ?>
<div id="container">
<div id="content">
<?php the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
34. <h1 class="entry-title"><?php the_title(); ?></h1>
<div class="entry-content">
<?php the_content(); ?>
<?php wp_link_pages('before=<div class="page-link">' . __( 'Pages:', 'seu-template' ) . '&after=</div>')
?>
<?php edit_post_link( __( 'Edit', 'seu-template' ), '<span class="edit-link">', '</span>' ) ?>
</div><!– .entry-content –>
</div><!– #post-<?php the_ID(); ?> –>
<?php if ( get_post_custom_values('comments') ) comments_template() // Adiciona um custom field
com Nome e Valor "comments" para que possa usar comentários numa página ?>
</div><!– #content –>
</div><!-- #container –>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Parte 9
CONSTRUINDO O FICHEIRO DE ARQUIVO, AUTOR, CATEGORIA E TAG
Tal como fizemos com o ficheiro index.php, vamos aproveitar o novo template dos templates e usá-lo para
construir os templates que nos faltam, nomeadamente o template de arquivo, autor, categoria e tag. O
nosso template mestre neste caso será o template de Arquivo.
O que o ficheiro archive.php faz (e todos os seus templates relacionados) é mostrar artigos baseados num
determinado critério. Um intervalo de datas, postagens por autor, uma categoria, ou uma tag. Portanto,
basicamente, é muito parecido com o ficheiro index.php. Vamos então começar novamente com o nosso
template dos templates (pode ir buscá-lo a nosso artigo da parte 6) que construímos num das lições
anteriores e começar a trabalhar em cima dele.
<?php get_header(); ?>
<div id="container">
<div id="content">
<div id="nav-above" class="navigation">
</div><!– #nav-above –>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
</div><!– #post-<?php the_ID(); ?> –>
35. <div id="nav-below" class="navigation">
</div><!– #nav-below –>
</div><!– #content –>
</div><!– #container –>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
O TEMPLATE DE ARQUIVO
Eis o esquema de um template de arquivo:
Chamar a função the_post()
Verificar que tipo de template é este
Produzir um template apropriado
Rebobinar as postagens com a função rewind_posts()
Correr o clico normal do WordPress
Eis então o conteúdo (#content) do seu ficheiro archive.php. Tome nota de que as Tags Condicionais que
se encontram no topo, servem para verificar que tipo de template estamos a usar.
<?php the_post(); ?>
<?php if ( is_day() ) : ?>
<h1 class="page-title"><?php printf( __( 'Daily Archives: <span>%s</span>', 'seu-template' ),
get_the_time(get_option('date_format')) ) ?></h1>
<?php elseif ( is_month() ) : ?>
<h1 class="page-title"><?php printf( __( 'Monthly Archives: <span>%s</span>', 'seu-template' ),
get_the_time('F Y') ) ?></h1>
<?php elseif ( is_year() ) : ?>
<h1 class="page-title"><?php printf( __( 'Yearly Archives: <span>%s</span>', 'seu-template' ),
get_the_time('Y') ) ?></h1>
<?php elseif ( isset($_GET['paged']) && !empty($_GET['paged']) ) : ?>
<h1 class="page-title"><?php _e( 'Blog Archives', 'seu-template' ) ?></h1>
<?php endif; ?>
<?php rewind_posts(); ?>
<?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
37. <?php the_tags( '<span class="tag-links"><span class="entry-utility-prep entry-utility-prep-tag-
links">' . __('Tagged ', 'seu-template' ) . '</span>', ", ", "</span>ntttttt<span class="meta-
sep">|</span>n" ) ?>
<span class="comments-link"><?php comments_popup_link( __( 'Leave a comment', 'seu-
template' ), __( '1 Comment', 'seu-template' ), __( '% Comments', 'seu-template' ) ) ?></span>
<?php edit_post_link( __( 'Edit', 'seu-template' ), "<span class="meta-
sep">|</span>ntttttt<span class="edit-link">", "</span>ntttttn" ) ?>
</div><!– #entry-utility –>
</div><!– #post-<?php the_ID(); ?> –>
<?php endwhile; ?>
<?php global $wp_query; $total_pages = $wp_query->max_num_pages; if ( $total_pages > 1 ) { ?>
<div id="nav-below" class="navigation">
<div class="nav-previous"><?php next_posts_link(__( '<span class="meta-nav">«</span> Older
posts', 'seu-template' )) ?></div>
<div class="nav-next"><?php previous_posts_link(__( 'Newer posts <span class="meta-
nav">»</span>', 'seu-template' )) ?></div>
</div><!– #nav-below –>
<?php } ?>
O TEMPLATE DE AUTOR
O seu template de autor não será muito diferente. Você certamente vai gostar deste. Copie o código do
ficheiro archive.php e atribua-lhe o nome author.php. A única coisa que necessita trocar é o título da
secção.
<h1 class="page-title author"><?php printf( __( 'Author Archives: <span class="vcard">%s</span>', 'seu-
template' ), "<a class='url fn n' href='$authordata->user_url' title='$authordata->display_name'
rel='me'>$authordata->display_name</a>" ) ?></h1>
<?php $authordesc = $authordata->user_description; if ( !empty($authordesc) ) echo apply_filters(
'archive_meta', '<div class="archive-meta">' . $authordesc . '</div>' ); ?>
Simples, hein?
O TEMPLATE DE CATEGORIA
O template de categoria é outro template que pode ser criado facilmente a partir do template de arquivo.
Copie o código do ficheiro archive.php e atribua-lhe o nome category.php.
Agora abra o ficheiro functions.php. Iremos introduzir uma função customizada que irá tornar o nosso
template de categoria mais simples de usar.
38. // Retorna outras categorias excepto a atual (redundante)
function cats_meow($glue) {
$current_cat = single_cat_title( '', false );
$separator = "n";
$cats = explode( $separator, get_the_category_list($separator) );
foreach ( $cats as $i => $str ) {
if ( strstr( $str, ">$current_cat<" ) ) {
unset($cats[$i]);
break;
}
}
if ( empty($cats) )
return false;
return trim(join( $glue, $cats ));
} // end cats_meow
A nossa função customizada cats_meow() remove a categoria corrente das páginas de categorias. Por
outras palavras, ela simplesmente livra-se de categorias redundantes quando pretende apresentar uma
lista de categorias.
Agora, volte ao ficheiro category.php, e substitua a secção de título de página pelo seguinte código:
<h1 class="page-title"><?php _e( 'Category Archives:', 'seu-template' ) ?> <span><?php single_cat_title()
?></span></span></h1>
<?php $categorydesc = category_description(); if ( !empty($categorydesc) ) echo apply_filters(
'archive_meta', '<div class="archive-meta">' . $categorydesc . '</div>' ); ?>
E na div “.entry-utility” troque:
<span class="cat-links"><span class="entry-utility-prep entry-utility-prep-cat-links"><?php _e(
'Posted in ', 'seu-template' ); ?></span><?php echo get_the_category_list(', '); ?></span>
com o seguinte código modificado:
<?php if ( $cats_meow = cats_meow(', ') ) : // Retorna categorias que não aquela pesquisada ?>
<span class="cat-links"><?php printf( __( 'Also posted in %s', 'seu-template' ), $cats_meow )
?></span>
<span class="meta-sep"> | </span>
39. <?php endif ?>
O TEMPLATE DE TAG
O template de tag é basicamente idêntico ao template de categoria, excepto no facto de ser para tags.
Você já sabe como fazer: copie o conteúdo do ficheiro archive.php e altere o nome para tag.php.
E temos novamente uma função customizad para incluir no ficheiro functions.php intitulada tag_ur_it(). Ela
funciona de forma parecida à função cats_meow() excepto o facto de que remove tags redundantes.
// Retorna outras tags excepto a atual (redundante)
function tag_ur_it($glue) {
$current_tag = single_tag_title( '', '', false );
$separator = "n";
$tags = explode( $separator, get_the_tag_list( "", "$separator", "" ) );
foreach ( $tags as $i => $str ) {
if ( strstr( $str, ">$current_tag<" ) ) {
unset($tags[$i]);
break;
}
}
if ( empty($tags) )
return false;
return trim(join( $glue, $tags ));
} // end tag_ur_it
Agora, no ficheiro tag.php, substitua o título da página por:
<h1 class="page-title"><?php _e( 'Tag Archives:', 'seu-template' ) ?> <span><?php single_tag_title()
?></span></h1>
e na div “.entry-utility” substitua:
<?php the_tags( '<span class="tag-links"><span class="entry-utility-prep entry-utility-prep-tag-
links">' . __('Tagged ', 'seu-template' ) . '</span>', ", ", "</span>ntttttt<span class="meta-
sep">|</span>n" ) ?>
pela versão modificada:
40. <?php if ( $tag_ur_it = tag_ur_it(', ') ) : // Retorna tags excepto a pesquisada ?>
<span class="tag-links"><?php printf( __( 'Also tagged %s', 'seu-template' ), $tag_ur_it ) ?></span>
<?php endif; ?>
Está feito!
Parte 10
CONSTRUINDO A BARRA LATERAL (SIDEBAR.PHP)
Sabemos que você tem esperado pacientemente por este artigo. Toda a gente adora a barra lateral de um
Template WordPress. Mas para não variar, iremos criar uma barra lateral um pouco diferente do que é
habitual em Templates WordPress. A nossa vai ser melhor e mais funcional!
FUNÇÕES CUSTOMIZADAS NA BARRA LATERAL
Primeiro as coisas mais importantes. Criando uma barra lateral em WordPress, uma das primeiras coisas a
ter em consideração é que essa barra suporte widgets. A nossa barra lateral vai ter duas secções de
widgets. Desta forma poderemos adaptar mais facilmente o código a templates de 2-colunas ou 3-colunas.
Isto é bastante simples e direto. No nosso ficheiro functions.php vamos registrar as nossas áreas de
widgets com o seguinte código.
// Registrar áreas de widgets
function theme_widgets_init() {
// Área 1
register_sidebar( array (
'name' => 'Primary Widget Area',
'id' => 'primary_widget_area',
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => "</li>",
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
// Área 2
register_sidebar( array (
'name' => 'Secondary Widget Area',
'id' => 'secondary_widget_area',
41. 'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => "</li>",
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
} // end theme_widgets_init
add_action( 'init', 'theme_widgets_init' );
Agora temos duas áreas de widgets: A área de widget primária (Primary) e a área de widget secundária
(Secondary). Não existe interesse em estar a chamar-lhes barra lateral primária e barra lateral secundária.
Em alguns templates nem barra lateral existe, mas no entanto existem zonas compatíveis com widgets.
Agora, ainda no ficheiro functions.php iremos adicionar mais duas customizações super interessantes e
engraçadas.
Primeiro, vamos definir os widgets pré-definidos: A pesquisa, páginas, categorias, arquivos, links e meta.
Não iremos programar esses conteúdos manualmente no ficheiro sidebar.php. Iremos simplesmente dizer
ao WordPress para os adicionar como widgets automaticamente na nossa área de widgets através das
opções.
$preset_widgets = array (
'primary_widget_area' => array( 'search', 'pages', 'categories', 'archives' ),
'secondary_widget_area' => array( 'links', 'meta' )
);
if ( isset( $_GET['activated'] ) ) {
update_option( 'sidebars_widgets', $preset_widgets );
}
// update_option( 'sidebars_widgets', NULL );
Agora, na nossa área de widgets primária (primary_widget_area) temos então o widget de pesquisa, o
widget de páginas, o widget de categorias, e o widget de arquivos. A área de widgets secundária
(secondary_widget_area) tem os widgets para links e meta. Todos eles são carregados automaticamente
com o template através das opções.
Consegue ver o código // update_option( 'sidebars_widgets', NULL ); na última linha? Se por alguma razão
quiser zerar seus widgets, remova esse código. Como provavelmente perceberá, NULL significa sem
widgets.
Agora, iremos criar uma nova condicional que irá verificar se existem widgets em alguma das nossas áreas
de widgets. Isto será incrivelmente útil quando desenvolvemos a nossa barra lateral.
42. // Verificar widgets nas áreas de widgets
function is_sidebar_active( $index ){
global $wp_registered_sidebars;
$widgetcolums = wp_get_sidebars_widgets();
if ($widgetcolums[$index]) return true;
return false;
} // end is_sidebar_active
Agora temos de colocar estes códigos a funcionar corretamente.
PROGRAMANDO A BARRA LATERAL
Com as nossas áreas de widgets dinâmicas registradas e os nossos widgets pré-definidos, o nosso Template
da Barra Lateral será um dos mais simples que alguma vez viu. Mas lembre-se, iremos também envolver as
nossas barras laterais numa declaração IF usando a nossa condicional is_sidebar_active().
Eis então como o código irá se parecer:
<?php if ( is_sidebar_active('primary_widget_area') ) : ?>
<div id="primary" class="widget-area">
<ul class="xoxo">
<?php dynamic_sidebar('primary_widget_area'); ?>
</ul>
</div><!– #primary .widget-area –>
<?php endif; ?>
<?php if ( is_sidebar_active('secondary_widget_area') ) : ?>
<div id="secondary" class="widget-area">
<ul class="xoxo">
<?php dynamic_sidebar('secondary_widget_area'); ?>
</ul>
</div><!– #secondary .widget-area –>
<?php endif; ?>
Agora, se for na página de administração dos widgets e retirar todos os widgets das suas áreas de widget
irá verificar que a nossa condicional dá erro. Isso significa que terão de existir widgets nas áreas para que o
seu template funcione corretamente.
43. Essa a forma como gostamos que as coisas funcionem. Como reparou também, estamos muito pertinho do
final, portanto, fique atento que a nossa série está quase terminando!
Parte 11
COMO CRIAR O CSS DO TEMPLATE
A programação CSS pode ser bastante complicado, como também pode ser bastante simples. Uma das
melhores formas de conseguir aprender bem sobre CSS é pedindo ajuda a outros usuários que já dominem
a linguagem, bem como procurando tutoriais na internet que o ajudem a melhorar as suas competências
técnicas com a linguagem.
Para lhe facilitar um pouco o trabalho, trazemos até si um arsenal de folhas de estilo CSS para que possa
moldar corretamente o seu template às suas necessidades:
Uma folha de estilos que reinicia o CSS padrão em todos os web browsers e que cria um standard com o
qual podemos trabalhar mais facilmente
Uma folha de estilos que recria as nossas fundações tipográficas de uma forma simples
Uma folha de estilos apenas para as classes do WordPress
Uma série de 6 folhas de estilo que irão criar todos os layouts do blog ou site que você deseja.
Antes de começarmos com a estilização, você deverá criar uma diretoria “style” na pasta do seu template.
É lá que iremos colocar todas as nossas folhas de estilo.
REINICIAR O CSS
A nossa folha de estilos Reset CSS é adaptada a partir de uma folha de estilo do Eric Meyer com pequenas
alterações. Basicamente o que ela faz é criar um standard com o qual possamos trabalhar de conveniente.
Usar esta folha de estilo é muito simples. Adicione as seguintes linhas ao seu ficheiro style.css, no topo, e
antes da secção de comentários.
/* Reset default browser styles */
@import url('styles/reset.css');
No entanto, para que tudo funcione corretamente, você deverá criar um ficheiro reset.css, com o código
que temos para si. Copie e cole esse código para criar o seu ficheiro:
/* --------------------------------------------------------------
Reset default browser CSS.
Based on work by Eric Meyer:
http://meyerweb.com/eric/tools/css/reset/index.html
------------------------------------------------------------- */
/* v1.0 | 20080212 */
45. q:before, q:after {
content: '';
content: none;
}
/* remember to define focus styles! */
:focus {
outline: 0;
}
/* remember to highlight inserts somehow! */
ins {
text-decoration: none;
}
del {
text-decoration: line-through;
}
/* tables still need 'cellspacing="0"' in the markup */
table {
border-collapse: collapse;
border-spacing: 0;
}
a img { border: none; }
RECRIAR O CSS
O nosso ficheiro Rebuild CSS é um ficheiro que trabalha toda a tipografia do nosso template de uma forma
inteligente e prática. O que esta folha de estilos faz é criar uma relação ritmada entre a tipografia utilizada
no template e todos os elementos do mesmo, de forma a que você possa alterar convenientemente a
dimensão das fontes e todo o layout mantenha uma estrutura equilibrada e funcional.
46. Usar o ficheiro rebuild.css é muito simples. Adicione as seguintes linhas de código imediatamente depois
da importação do seu ficheiro reset.css no seu style.css.
/* Rebuild default browser styles */
@import url('styles/rebuild.css');
No entanto, para que tudo funcione corretamente, você deverá criar um ficheiro rebuild.css, com o código
que temos para si. Copie e cole esse código para criar o seu ficheiro:
/* --------------------------------------------------------------
Rebuild the default browser styles
Based on work by Blueprint CSS
http://code.google.com/p/blueprintcss/
-------------------------------------------------------------- */
body {
background: #fff;
}
body, input, textarea {
color: #111;
font: 12px Arial,sans-serif;
line-height: 1.5;
}
/* Headings
------------------------------------------------------------- */
h1,h2,h3,h4,h5,h6 {
font-weight: normal;
clear: both;
}
hr {
background-color: #999;
border:0;
height: 1px;
47. margin-bottom: 1.5em;
}
/* Text elements
-------------------------------------------------------------- */
p{
margin-bottom: 1.5em;
}
ul {
margin: 0 0 1.5em 2.5em;
}
ol {
margin: 0 0 1.5em 2.5em;
}
ul {
list-style:disc;
}
ol {
list-style-type: decimal;
}
ol ol {
list-style:upper-alpha;
}
ol ol ol {
list-style:lower-roman;
}
ol ol ol ol {
list-style:lower-alpha;
}
48. ul ul, ol ol, ul ol, ol ul {
margin-bottom:0;
}
dl {
margin:0 1.5em;
}
dt {
font-weight: bold;
}
dd {
margin-bottom: 1.5em;
}
strong {
font-weight: bold;
}
cite, em, i {
font-style: italic;
}
blockquote {
margin: 0 3em;
}
blockquote em, blockquote i, blockquote cite {
font-style: normal;
}
pre {
font: 11px Monaco, monospace;
line-height: 1.5;
margin-bottom: 1.5em;
49. }
code {
font: 11px Monaco, monospace;
}
abbr, acronym {
border-bottom: 1px dotted #666;
cursor: help;
}
ins {
text-decoration: none;
}
sup,
sub {
height: 0;
line-height: 1;
vertical-align: baseline;
position: relative;
}
sup {
bottom: 1ex;
}
sub {
top: .5ex;
}
/*
Adapt the following for use in your Child Themes when using
different font-sizes and line-heights
body, input, textarea {