Se você leu o artigo anterior (Estrutura de arquivos de um tema WordPress) da série “Criar tema WordPress“, sabe que com poucos arquivos é possível criar um tema básico com tudo que o CMS nos oferece. No entanto, já que você está customizando seu tema, é certo que vai precisar de algumas funções que estendam ou modifiquem a funcionalidade padrão do WordPress. É aqui que entra o functions.php.

O arquivo functions.php é um arquivo PHP comum, que pode receber tanto funções nativas do PHP quanto funções do WordPress, para adicionar ações (actions) e filtros (filters) ao seu tema. Além disso, você também pode criar classes, variáveis, e qualquer coisa que colocaria em um arquivo PHP normal.

Ele é carregado tanto na área administrativa do WordPress (wp-admin) quanto no tema público, portanto, qualquer erro neste arquivo pode fazer com que o WordPress pare de funcionar como um todo. Você pode tirar benefícios desse comportamento adicionando opções ao seu tema, como página de opções, página de configurações da aparência, campos adicionais nos posts e páginas, e qualquer coisa que sua imaginação e conhecimento lhe oferecerem.

A maioria (se não todos) os temas WordPress têm seu próprio arquivo functions.php, porém, apenas o tema ativo terá seu arquivo carregado.

Nos trechos a seguir, vou passar milhares de dicas para você adicionar, remover ou estender funcionalidades do WordPress no seu arquivo de funções (functions.php).

Criando o arquivo functions.php

Se você não está seguindo nossos artigos na ordem correta, abra um arquivo functions.php de qualquer tema do WordPress e adicione a opção que deseja (caso ele ainda não tenha tal opção). Do contrário, você pode criar este arquivo utilizando qualquer editor de texto puro (como o Bloco de Notas). Apenas lembre-se que a extensão do arquivo deve ser “.php” e não “.txt“.

O arquivo deverá estar presente na pasta do seu tema, nosso caso “tutsup-basico“.

Criei o arquivo functions.php

Criei o arquivo functions.php

Dentro desse arquivo iremos colocar as ações que desejamos, das quais seguem abaixo.

Limpando seu tema WordPress no functions.php

Como um bom CMS, o WordPress tenta fazer tudo automaticamente para o usuário, porém, algumas vezes isso pode ser inconveniente para desenvolvedores que gostam de manter as coisas limpas. A seguir vou passar uma série de linhas de códigos para serem adicionadas no seu functions.php para remover algumas partes padrão do WordPress.

Remover a barra administrativa

Para esconder a barra administrativa do WordPress, simplesmente adicione a linha de código abaixo ao arquivo functions.php:

// Remove a barra de admin
add_filter('show_admin_bar', '__return_false');

 Remover link RSD

O RSD (Real Simples Discovery) é usado pelo mecanismo de clientes XML-RPC. Se você não utiliza serviços como Flickr ou Quora com seu WordPress, considere removê-lo com a linha de código abaixo:

// Remover link RSD
remove_action ('wp_head', 'rsd_link');

 Remover shortlink

Por padrão, o WordPress mostra os links curtos dos artigos no cabeçalho. Caso queira, é possível remover com a seguinte linha de código:

// Remove os shortlinks dos posts
remove_action( 'wp_head', 'wp_shortlink_wp_head');

 Remover WP Generator

Na minha opinião, a pior coisa que você pode fazer é falar a versão de WordPress que você está utilizando publicamente. Se existir algum bug naquela versão, hackers poderão explorar tal bug no seu blog, já que sabem a versão que você utiliza.

O WordPress fala pra todo mundo qual a versão você está utilizando com a tag:

<meta name="generator" content="WordPress 4.0" />

Para remover isso, adicione o seguinte no seu functions.php.

// Remove a versão do WordPress do cabeçalho
remove_action('wp_head', 'wp_generator');

Remover wlwmanifest_link

Este é um recurso para quem utiliza o Windows Live Writer, se não for seu caso, adicione o seguinte no functions.php:

// Remove wlwmanifest_link - Recurso usado pelo Windows Live Writer. 
remove_action( 'wp_head', 'wlwmanifest_link');

Remover estilo padrão da galeria de imagens

A galeria de imagens vem com estilo padrão, o que pode tornar mais complicado fazer a estilização por CSS. Caso queira remover o estilo padrão, adicione o seguinte:

// Remove estilos da galeria
add_filter( 'use_default_gallery_style', '__return_false' );

Adicionando funcionalidades ao seu tema WordPress

Podemos adicionar quantas funcionalidades forem necessárias em nosso tema WordPress, porém, vou passar as mais comuns a seguir:

 Adicionando estilos e scripts

Você pode adicionar quantos arquivos de estilo CSS e scripts quiser, para isso basta adicionar uma ação em wp_enqueue_scripts. Veja:

// Estilos e scripts
function tutsup_enqueue_scripts () {
	// Versão do nosso tema
	$tutsup_version = '1.0';
	
	// Style.css
	wp_enqueue_style( 'tutsup-style-description', get_stylesheet_uri(), array(), $tutsup_version, 'all' );
	
	// Um arquivo de CSS qualquer dentro da pasta css/
	wp_enqueue_style( 'tutsup-style', get_template_directory_uri() . '/css/main-style.css', array(), $tutsup_version, 'all' );

	// Um arquivo de script qualquer dentro da pasta js/
	wp_enqueue_script( 'tutsup-scripts', get_template_directory_uri() . '/js/scripts.js', array('jquery'), $tutsup_version, true );

}
// Carrega os estilos e scripts
add_action( 'wp_enqueue_scripts', 'tutsup_enqueue_scripts' );

Uma ação nada mais é do que uma função do PHP, onde chamamos wp_enqueue_style para CSSs e wp_enqueue_script para scripts.

Como estamos chamando dois arquivos que não existem, é provável que você não veja os nossos estilos no código fonte. Então vamos criar uma pasta chamada “css” (para todo nosso CSS) e outra chama “js” para nossos scripts JavaScript.

Na pasta css vamos criar um arquivo chamado “main-style.css” (este nome é opcional, você escolhe), assim, ao invés de utilizar o arquivo “style.css” padrão do WordPress, podemos manipular nosso CSS dentro desse arquivo.

Na pasta js vamos criar um arquivo chamado “scripts.js” (este nome é opcional, você escolhe). Este será nosso arquivo de scripts JavaScript.

Agora sim, você já deverá visualizar seu CSS e JavaScript customizado no código fonte do seu novo tema.

Registrando sidebars (para Widgets)

O WordPress aceita quantas “sidebars” você precisar. Essa nomenclatura não está correta, pois, sidebar refere-se a barras laterais.

No WordPress, a função register_sidebar registra uma área onde você pode adicionar Widgets, e não uma barra lateral em si. Por exemplo, você pode registrar várias sidebars para o rodapé, outras para a barra lateral, outras para o topo, enfim, qualquer lugar.

Para registrar sidebars utilize a função widgets_init, veja:

// Registra as sidebars
function tutsup_sidebars()	{
	register_sidebar( array(
		'name'          => 'Sidebar',
		'id'            => 'sidebar-1',
		'description'   => 'Widgets da sidebar.',
		'before_widget' => '<div id="%1$s" class="widget %2$s">',
		'after_widget'  => '</div>',
		'before_title'  => '<h4 class="sidebar-widget-title">',
		'after_title'   => '</h4>',
	) );
	register_sidebar( array(
		'name'          => 'Rodapé',
		'id'            => 'footer-1',
		'description'   => 'Widgets do rodapé.',
		'before_widget' => '<div id="%1$s" class="widget %2$s">',
		'after_widget'  => '</div>',
		'before_title'  => '<h4 class="footer-widget-title">',
		'after_title'   => '</h4>',
	) );
}
add_action( 'widgets_init', 'tutsup_sidebars' );

Para registrar qualquer sidebar, utilize a função register_sidebar.

Adicionando novos campos no perfil de usuário

Para adicionar novos campos no perfil de usuário, basta adicionar uma ação na função user_contactmethods. Veja:

// Adiciona novos campos de contato no perfil do usuário
function tutsup_new_contact_fields( $contact_fields ) {
	// Adiciona o twitter
	$contact_fields['twitter'] = 'Twitter';
	
	// Adiciona o Facebbok
	$contact_fields['facebook'] = 'Facebook';
	
	// Adiciona o Google+
	$contact_fields['googleplus'] = 'Google+';

	return $contact_fields;
}
add_filter('user_contactmethods', 'tutsup_new_contact_fields', 10, 1);

Acima não tenho muito o que explicar, simplesmente siga o modelo.

Para chamar um dos campos acima, simplesmente faça o seguinte dentro do loop:

// Chama o link do facebook 
echo get_the_author_meta( 'facebook', get_the_author_meta( 'ID' ) );

Adicionando opções no tema

Por padrão, seu tema não vem com todas as opções ativas, você deve fazer isso manualmente.

Para adicionar qualquer opção em um tema do WordPress, adicione uma ação na função after_setup_theme. Veja:

// Configurações do tema
function tutsup_setup() {		
	// Ativa o feed
	add_theme_support( 'automatic-feed-links' );
	
	// Ativa imagens destacadas
	add_theme_support( 'post-thumbnails' );
	
	// Ativa posts-formats
	add_theme_support( 'post-formats', array( 'audio', 'aside', 'chat', 'gallery', 'image', 'link', 'quote', 'status', 'video' ) );
	
	// Adiciona tamanhos de imagens customizados
	add_image_size( 'tutsup-small', 430, 286, true );
	add_image_size( 'tutsup-large', 1140, 1140, false );
	add_image_size( 'tutsup-thumbnails', 200, 133, true );

	// Registra um menu
	register_nav_menus( array(
		'header' => 'Header',
	) );
}
add_action( 'after_setup_theme', 'tutsup_setup' );

Acima utilizamos milhares de funções simples no tema acima para adicionar várias opções diferentes em nosso tema. Além disso, também registramos um menu.

Veja as funções utilizadas:

Uma outra dica simples para forçar o WordPress ler “shortcodes” nos Widgets:

// Força o wordpress a ler shortcodes em textos de widgets
add_filter('widget_text', 'do_shortcode');

 Modificando o comportamento padrão

Você também pode modificar o comportamento padrão de qualquer operação do WordPress, por exemplo, eu utilizo uma classe chamada “videowrapper” em todos os parágrafos que têm iframes do Youtube no conteúdo do texto dos meus artigos.

Porém, eu não queria ter que colocar isso manualmente no meu código. Então utilizei o functions.php para alterar o conteúdo dos meus texto automaticamente. Veja:

/**
 * Troca <p> ... <iframe... </p>
 * Para <p class="videowrapper"> ... <iframe... </p>
 */
function fix_videos( $content ) {
	$content = preg_replace('/^(<p[^>]*>)([^<]*)(<iframe.*?src=['|"].*?youtube.com.*?['|"].*?</iframe>)([^<]*)(</p>)$/mis', 
	'<p class="videowrapper">\3</p>',
	$content);

	return $content;
}
add_filter( 'the_content', 'fix_videos' );

Outra coisa que sempre faço, é modificar o texto “more” do WordPress para algo que se adapte ao meu tema. Por exemplo: … Saiba mais.

Veja como fazer:

function new_excerpt_more( $more ) {
	return '... [ <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">' . __('Saiba mais', 'tutsup') . '</a> ] ';
}
add_filter( 'excerpt_more', 'new_excerpt_more' );

Por falar nisso, você também pode modificar o tamanho do resumo (excerto), veja:

/* Agora o excerto tem 30 palavras máx. */
function custom_excerpt_length( $length ) {
   return 30;
}
add_filter( "excerpt_length", "custom_excerpt_length", 999 );

Concluindo

Por agora, vamos deixar nosso arquivo functions.php da maneira descrita acima, iremos edita-lo conforme precisarmos enquanto criamos nosso tema.

Caso tenha dúvidas, basta perguntar nos comentários. E não deixe de seguir a série completa sobre “Como criar um tema WordPress“.