Como remover a barra de menu do WP 3.1

Esta dica é para quem não gostou da barra de menu admin que é exibida no blog sempre que é feito o login. Para removê-la basta adicionar o código abaixo no arquivo functions.php do tema atual.

wp_deregister_script('admin-bar');
wp_deregister_style('admin-bar');
remove_action('wp_footer','wp_admin_bar_render',1000);

[update] De fato existe uma opção no perfil do usuário que permite desabilitar esta opção. A vantagem de utilizar este código é eliminar a barra de todos os usuários do blog e não permitir que os mesmos ativem esta opção.

Fonte: Wp-Recipes

Redimensionamento das miniaturas sem gambiarras

Que o WordPress é um sistema muito flexível todos nós já sabemos, mas flexibilidade não é sinônimo de gambiarra, e é isso que temos que fazer quando temos um site com miniaturas de vários tamanhos e então ficamos reféns daquele famoso arquivo que redimensiona todas as imagens automaticamente. Com o truque abaixo não precisamos fazer mais isso, quando queremos puxar a miniatura basta informar o tamanho predefinido.

1º Passo

O WP tem uma função chamada add_image_size que serve para redimensionar a imagem automaticamente quando for feito o upload dela. Ela tem dois modos de corte da imagem.

No arquivo functions.php você deve adicionar essa linha.

add_image_size( "miniatura-post", 300, 150, true );

Explicando

“miniatura-post” é o nome que você ira usar para chamar esse tamanho.

300 e 150 correspondem a largura e altura da imagem de saída.

true serve para dizer se a imagem é para ficar nas dimensões exatas (true) ou proporcional (false).

Observação: Caso você coloque em false a imagem nem sempre sairá no tamanho desejado e sim proporcional ao seu tamanho original, a vantagem desse modo é que a imagem não sofre cortes.

2º Passo

No local onde você quer que a imagem apareça basta adicionar esse código, lembrando que deve ser adiciona dentro do loop do WP.

<?php the_post_thumbnail("miniatura-post") ?>

“miniatura-post” é o nome definido no arquivo functions.php.

Observação: Esse recurso só funciona em imagens que forem adicionadas após você adicionar esse código, para as imagens antigas funcionarem existe o plugin Regenerate Thumbnails que recorta todas as imagens no novo tamanho especificado, mas eu percebi uma desvantagem nele. Caso você troque de tema regularmente e precise refazer várias vezas as miniaturas ele não apaga as antigas, somente acrescenta os novos tamanhos no diretório.

Valeu pessoal até a próxima!

Criando uma página para cada tipo de conteúdo

Após criar seus tipos de conteúdo personalizados, você certamente vai querer ter um local para mostrar todos os posts daquele tipo, a dica seguinte serve para isso. Confira.

Na pasta do template que você está usando crie um arquivo com o nome do seu tipo de conteudo, no meu caso ficou portfolio.php, em seguida adicione o seguinte código:

<?php
/*
Template Name: Portfolio
*/
?>
<?php get_header(); ?>
	<div id="content">
	<?php
		$loop = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => 10));
	?>
	<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
        <div id="portfolio-item">
		<h1><?php the_title(); ?></h1>
		<?php the_post_thumbnail(); ?>
		<?php the_content(); ?>
	</div>
        <?php endwhile; ?>
        </div><!-- #content -->
<?php get_footer(); ?>

Explicando:
Primeiro dizemos o nome do modelo (depois vocês vão entender) que é ‘Portfolio’. Como num template normal temos a query que busca os posts, então criamos uma nova query e definimos o tipo de conteúdo para exibir, que neste caso é ‘Portfolio’. Vocês poderiam adicionar qualquer outro argumento como por exemplo ‘posts_per_page’ para definir uma número máximo de posts a exibir. Apos a query eu crio um loop, não vou explicar o que está dentro do loop porque é igual a um template normal. Você também pode resgatar campos personalizados que você criou mas isso você encontra em um outro artigo eu publiquei.

Agora no painel, vamos criar uma nova página (Páginas->Adicionar nova) coloque titulo, conteúdo (opcional) e o que você quiser colocar, então ali dentro de Atributos da página mude o modelo, para o nome do modelo que você criou.

Com essa dica podemos notar que o WordPress está se tornando um CMS muito poderoso para diversas coisas e também vemos que com poucas linhas de código podemos fazer milagres.

Valeu galera, até a próxima…

Adicionando meta boxes ao WordPress

Olá todos, este é o meu primeiro post aqui no pBlog. Hoje vou mostrar como adicionar caixas de informações (Meta boxes) adicionais do post. Este recurso serve para todas as versões acima da 2.5, quem possuir a versão 3.0 ou superior pode exibir metaboxes de acordo com o tipo de post escolhido

O que são Meta boxes?

Meta boxes são caixas que aparecem na criação de um post elas permitem adicionar informações padronizadas quando estamos criando um post.

Mãos a obra

Em seu arquivo functions.php do seu template adicione o seguinte código:

add_action('admin_init','metaboxes');</code>

function metaboxes(){

    add_meta_box( 'ingredientes_meta', 'Ingredientes' , 'ingredientes_call', 'post', 'normal', 'low' );

}

Abaixo a descrição de cada argumento:

‘ingredientes_meta’: nome interno do meta box;

‘Ingredientes’: Titulo do meta box. Será exibido na página de criação/edição do post;

‘ingredientes_call’: Função que imprime os campos personalizados;

‘post’: Onde o meta box deverá ser exibido, pode ser o nome do tipo de post;

‘normal’: Argumento opcional, define onde devera ser exibido, pode ser 'normal', 'advanced', or 'side';

‘low’: Argumento opcional, define a posição do meta box, em ‘low’ ele adiciona ao lado lá em baixo, em ‘high’ ele adiciona embaixo do editor de texto;

Este código abaixo, imprime os campos, o nome da função é igual ao terceiro argumento da função acima.

function ingredientes_call(){
   echo '<label for="ingredientes_textarea">';
   echo '<textarea name="ingredientes_textarea"></textarea>';
}

No código acima imprimimos um textarea e sua label, pode se adicionar qualquer elemento de um formulário, inputs, checkbox, radios…

Salvando os dados

Depois de tudo, basta salvar as informações no banco, isso é feito adicionando o seguinte código.

add_action('save_post', 'salva_ingredientes');

A função acima, faz com que quando salvemos o post ele chame a função salva_ingredientes que salva as informações personalizadas no banco.

function salva_ingredientes(){
global $post;
update_post_meta($post->ID, "ingredientes", $_POST["ingredientes_textarea"]);
}

Acima, nos passamos o ID do post, depois o nome que será salvo no banco, e o valor que é o campo.
Na verdade os meta boxes são iguais aos campos personalizados, so que são mais padronizados e bonitos. Para resgatar os valores é igual como se estivese resgatando o valor de uma campo personalizado.

$campos = get_post_custom($post->ID);
$ingredientes = $campos["ingredientes"][0];
echo $ingredientes;

Espero que tenham gostado do meu primeiro post.
Não esqueçam de dizer o que acharam dele nos comentários.
Até a próxima. Valeuu!

Como ter um background diferente em cada categoria

Já recebi alguns emails e respondi alguns tópicos no fórum sobre como ter um background/banner/imagem diferente em cada categoria do WordPress. Como é algo simples e que pode ter muitas utilizadades resolvi fazer este rápido tutorial explicando o passo-a-passo. Para exemplificar utilizarei o tema Mystique, que além de ser muito bom possui um background que poderemos utilizar neste exemplo.

Antes de colocarmos a mão na massa vamos primeiro explicar a teoria. No WordPress existe um recurso chamado Condicional Tags que nos permite realizar uma tarefa apenas se atender uma condição. Por exemplo, exiba este menu apenas se a página for a inicial. Com o tempo é fácil perceber o poder que as condicionais possuem e a quantidade de coisas que se podem fazer com elas, principalmente em termos de personalização.

Então vamos cair em campo, no CSS do tema Mystique há uma id chamada page que define o background.

#page{background:transparent url(images/header.jpg) no-repeat center top;}

A idéa é criar uma id para cada categoria e claro, um background para cada uma também, para isso acrescentaríamos mais algumas linhas de código ao CSS.

#page{background:transparent url(images/header.jpg) no-repeat center top;}
#page1{background:transparent url(images/header1.jpg) no-repeat center top;}
#page2{background:transparent url(images/header2.jpg) no-repeat center top;}
#page3{background:transparent url(images/header3.jpg) no-repeat center top;}

Não esqueça de criar as novas imagens que serão usadas como background e fazer o upload, neste exemplo seriam as imagens header1.jpg, header2.jpg e header3.jpg. Feito isso é hora de usarmos as codicionais do WordPress e dar o pulo do gato. No arquivo header.php, exatamente na linha 30, existe o código:

<div id="page">

Empregando as codicionais nós iremos fazer com que o valor da id “mude” de acordo com a categoria que esteja sendo exibida.

<?php if (is_home()) { ?>
<div id="page">
<?php } else if (is_category('noticias')) { ?>
<div id="page1">
<?php } else if (is_category('novidades')) { ?>
<div id="page2">
<?php } else if (is_category('geral')) { ?>
<div id="page3">
<?php } ?>

Interpretando o código: Se a página for a home faça id=”page” e por consequência o background exibirá a imagem header.jpg, caso a página seja da categoria notícias faça id=”page1″ e a imagem do background exibirá a imagem header1.jpg e assim por diante.

Simples não? Se você der uma olhada na página do Codex referente as Condicional Tags verá que existe dezenas de opções. Você poderá utilizar para os mais diversos fins, por exemplo, exibir anúncios de DVD’s apenas na categoria filmes, ocultar o menu lateral das páginas e posts, etc.

Associando posts com páginas

Primeiramente: Oi e desculpe. Faz muito tempo desde meu último post, na verdade faz muito tempo que não posto em lugar nenhum (incluindo a comunidade do WordPress Brasil que nunca mais “pisei lá”). Bom, minhas horas vagas que normalmente utilizaria para postar em fóruns e no meu site ocupo com outros afazeres de fim de ano, ainda não consegui arranjar tempo para botar meu site de volta no ar e minha pauta no trabalho só cresce. Mas enfim, estou aqui e tenho uma ótima dica pra dividir com vocês, é muito simples e muito útil, tive que usar recentemente para criar um sistema de FAQ pelo gerenciador do WP. Então vamos ao que interessa.
É de conhecimento de todos (ou quase todos) que utilizam o WP que ao criar um página é possível encaixar ela dentro de outra página, a chamada hierarquia de mãe e filhos (mother and children). É muito simples, porém útil. A idéia é basicamente criar uma página que poderá ser filha de outra página ou não. Ou seja, se ela não for filha de nenhuma página ela estará na raiz da hierarquia, mas se ela for uma página filha ela estará associada a uma outra página, assim estando abaixo dela. Um exemplo de hierarquia:

  • Sobre nós (mãe na raíz)
    • Parceiros (filho de “Sobre nós”)
    • Organização (filho de “Sobre nós” e mãe de “Funcionários”)
      • Funcionários (filho de “Organização”)
    • Compromissos (filho de “Sobre nós”)

Bom, agora que entenderam a idéia de mother and children, vamos a próxima explicação: Quando escrevemos um post relacionamos categorias a ele, essa é a hierarquia de associação de posts, ou seja, para as páginas o método de associação é M&C (mother and children) enquanto que em posts são as categorias. Got it? Pois bem, o princípio dessa dica é poder além de associar posts a categorias, associar posts a páginas. O “custo” para criar um plugin que faça isso é praticamente zero, tudo já fornecido pelo WordPress. A idéia é replicar o método de associação de páginas M&C para funcionar em posts. Essa é a hora que você pergunta: Com qual propósito? E eu repondo: Lembra da hierarquia exemplo que eu passei logo acima, imagine que você faz o layout da página Funcionários, não seria bacana criar posts com o titulo do nome do funcionário e uma descrição sobre ele e associar esses posts a página “Funcionários” e listar os mesmos, ao invés de criar a categoria “Funcionários” ou uma outra página? Assim podendo selecionar categorias para esse post. Pois bem, esse é o propósito dessa dica. Eu criei um plugin simples que faz exatamente isso. Sabia que se você associar um post a uma página ou uma página a outra página sai mais barato para o MySQL realizar essa consulta? A consulta Página e filhos sejam os filhos posts ou páginas, retorna mais rápido do que uma consulta com categorias, onde a associação de post e categoria envolve mais duas tabelas além da dos posts, ao contrário de uma associação do tipo M&C que envolve só a tabela dos posts. Resumindo, é mais viável associar um post a uma página e puxar por ela, do que associar a uma categoria, mas é necessário uma visão de praticidade também, às vezes, dependendo da utilização das categorias é mais prático utilizar categorias do que páginas, e outras é mais prático utilizar as próprias páginas dentro da página do que associas posts a elas. É preciso ter visão! Agora vamos a utilização do plugin…

Clique aqui para fazer o download da versão 1.0

Ao baixar, passar para o diretório “wp-contents/plugins” e ativá-lo você poderá editar ou criar um post e visualizará abaixo de tags uma caixa com o título “Associar a uma página”, é ai que você associa o post a uma página. Pronto, agora que sabe como associar, vamos ver como pegar essas associações. Abra o template de alguma página ou o arquivo de template padrão de páginas do WordPress “page.php” e adicione entre as funções while e endwhile uma nova while com a função have_children(), ficando algo semelhante a isso:


Posts relacionados:

1) : ?>

Nao ha posts para esta pagina na pagina "".


Essa página não contém nenhuma associação com outros posts.
the_content();
?>

Muito fácil, não?  Essa função have_posts_children() propriamente dita é um get_posts() que pega o ID da página exibida no while com have_posts() e através de um novo while lista os posts associados. A função continue_have_posts() serve para continuar a puxar as informações da página depois que você lista todos os posts relacionados a página, isso quer dizer que você pode fazer até uma paginação dentro da página com os posts relacionados e depois que colocar a função de paginação você coloca a função continue_have_posts() e continua a puxar as informações da página normalmente. Você também pode substituir a função while por foreach definindo o valor true dentro da função have_posts_children(). Assim:


Posts da categoria:


Essa página não contém nenhuma associação com outros posts.



A página que você está tentando acessar não existe.

Lembrando que na função have_posts_children() você pode usar os parâmetros de query_posts(), ou seja, a função have_posts_children() é quase como um segundo query_posts(), onde há um parâmetro padrão que justifica o relacionamento entre posts e outras páginas (ou outros posts também). Esse parâmetro é “post_parent=%” onde no lugar de “%” vai o ID da página citado em have_posts(). Para desativar, esse “post_parent” que é definido por padrão na função e usar have_posts_children() exatamente como uma segunda query, basta definir:



Ficando algo assim:



query_posts_children('post_parent=false');
if(have_posts_children()) : ?>

Todos os posts do site sem precisar ter nenhum relação):


Essa página não contém nenhuma associação com outros posts.



A página que você está tentando acessar não existe.

É ai que entra uma outra função query_posts_children(), ela funciona mais ou menos como query_posts() sobre have_posts(). Só que essa função funciona apenas sobre have_posts_children().

Como havia dito, por padrão have_posts_children() pega os posts associados via parâmetro “post_parent”. Então se associarmos um post em uma página “X”, e associarmos este mesmo post a uma categoria “Y”, podemos puxar via have_posts_children() os posts associados com a página “X” e com a categoria “Y”, através da função query_posts_children().  Assim:



Ou seja, se você aplicou query_posts_children() no template de página do WordPress, a opção acima equivale a:



Digo e repito, que query_posts_children() já define por padrão o parâmetro post_parent, onde o valor é o ID da página.
Outra dica muito bacana e útil com relação a essa função e que você pode ao invés de puxar, posts relacionados, você pode puxar as páginas relacionadas, que seriam as páginas filhas da página que está aberta. Usando query_posts_children() dessa forma:



Também temos uma outra função:



A idéia dessa função é que mesmo que você escreva um post e associe ele a uma página, o WordPress necessita que você associe esse post a uma categoria também, se não associarmos uma categoria, o WordPress associa automaticamente a uma padrão. Mas enfim, a idéia dessa função é burlar isso, de modo que se você entrar na página da categoria na qual o post foi associado não exiba o mesmo se ele estiver associado com uma página também. Deu pra sacar? Se desejarem fazer isso, basta você adicionar no inicio do arquivo de template da categoria essa função, ou para um efeito melhor ainda coloque dentro do arquivo “functions.php” do seu tema. Se este arquivo não existir crie ele. Aliás, você pode copiar todo o código desse plugin e colar dentro do arquivo “functions.php” ao invés de usá-lo como um plugin, daí você estará adaptando o seu tema.

Obs(1).: Lembrando que na hierarquia das páginas você pode ter slugs repetidas, se as estas estiverem em degraus de hierarquia diferentes, ao contrário de categorias que mesmo em degraus diferentes a slug é única.
Ou seja, você pode ter as duas URLs abaixo funcionando perfeitamente se as mesmas forem páginas:
http://www.pblog.com.br/plugins/mais-populares/
http://www.pblog.com.br/temas/mais-populares/
Mas não com categorias, acho isso uma falha do WordPress, mas por outro lado é menos consulta com o MySQL, Alías, pra arrumar isso na hierarquia das categorias não é tão díficil, porém a API do WordPress não facilita muito para esse fim.

Não utilizei muitas linhas para escrever esse plugin, tornando-o simples, porém muito útil como havia dito anteriormente. Talvez eu dê uma nova versão pra ele, posso implementar várias coisas para melhorar a usabilidade.  Bom, essa foi a dica de hoje, eu tenho várias outras dicas interessantes e úteis como essa, porém realmente me falta tempo, mas vou arranjar. Ainda mais quando o meu site voltar ao ar. Mas enfim, espero que tenham curtido. Abraço a todos.

Obs(2).: Eu odiei o layout da versão 2.7!

Clique aqui para fazer o download da versão 1.0 do plugin.