Categorias
Tecnologia

Como utilizar Ajax no WordPress

Hoje vou dar uma dica de como utilizar ajax no WordPress.

Precisei fazer uma chamada assíncrona em uma página de template do WordPress em um projeto que estive trabalhando e fui pesquisar como funcionava. O WordPress tem seu jeitinho todo especial de executar requisições XHR.

O primeiro passo é escrever uma função (no arquivo functions.php) para executar o que você quiser que o backend faça nessa chamada Ajax. No caso do exemplo desta publicação estou enviando um email.

// Actions to send mail
add_action('wp_ajax_sendMyMail', 'sendMyMail');
add_action('wp_ajax_nopriv_sendMyMail', 'sendMyMail');

// Sending the email
function sendMyMail() {
  global $wpdb;

  $message = "Form data:\n\n Name: {$_POST['name']}";
  if (wp_mail('email@email.com', 
              'Title', 
              $message, 
              array('Cc:email@copy.com'), 
              array())) {
  	echo 'success';
  } else {
  	echo 'error';
  }

  die();
}

Linha por linha da função no functions.php

Usando o add_action do WordPress, registramos nossa função. No primeiro wp_ajax_sendMail estamos registrando a função para utilização no painel Admin do WordPress e com o wp_ajax_nopriv_sendMail registramos a função para utilização no frontend, onde o usuário não estará logado.

O formato desses dois tipos de actions específicas para ajax sempre devem começar com wp_ajax_(action) ou wp_ajax_nopriv_(action).

// Actions to send mail
add_action('wp_ajax_sendMyMail', 'sendMyMail'); 
add_action('wp_ajax_nopriv_sendMyMail', 'sendMyMail');

Depois vem a função em si, com as ações que você quiser. Como eu já disse, nesse exemplo é o envio de um email.

// Sending the email function 
sendMyMail() {
 global $wpdb;
 $message = "Form data:\n\n Name: {$_POST['name']}";

 if (wp_mail('email@email.com',
             'Title',
             $message,
             array('Cc:email@copy.com'),
             array())) {
  echo 'success';
 } else {
  echo 'error';
 }

No final usamos o die() do PHP para encerrar o processo.

 die();
}

A requisição Ajax

Agora vamos à chamada assíncrona no Javascript.

Fazemos uma chamada com o método $.ajax do jQuery normalmente, mas a diferença está na URL que utilizaremos nela e em um item que precisa ser adicionado nos dados enviados para o servidor.

$.ajax({
 type:"POST",
 url: "/wp-admin/admin-ajax.php",
 data: {
  action: 'sendMyMail',
  name: $('input[name=name]').val()  
 },  
 success: function(data){
  console.log(data)
 }
});

A URL deve ser sempre /wp-admin/admin-ajax.php e o nome da ação que você registrou no functions.php entra como um dado com o nome action junto com o resto dos dados que você irá mandar para o servidor.

url: "/wp-admin/admin-ajax.php",
data: {
 action: 'sendMyMail',
 name: $('input[name=name]').val() 
 }

E voilá!

Deixe suas dúvidas ou opiniões nos comentários abaixo.

Nos vemos na próxima.

Categorias
Tecnologia

Redirecionando posts para subdomínio no WordPress

Quando postagens já estão indexadas pelos mecanismos de busca, como Google e Bing, há algum tempo fica complicado mudar um blog do WordPress de domínio.

No meu caso eu precisava mudar apenas alguns posts de categorias específicas para um outro subdomínio do meu site. O objetivo era redirecionar os posts relacionados com artes para o meu novo blog sobre arte.

Depois de pesquisar um pouco acabei chegando em uma solução razoável.

Criei o novo blog com WordPress, importei o conteúdo das categorias específicas para o mesmo e coloquei em um novo subdomínio.

No meu blog atual, este que você está lendo agora, no arquivo functions.php do template adicionei o código abaixo.

add_action('template_redirect', 'redirect_category_posts');
function redirect_category_posts() {
 global $post;
 if (is_single($post->ID) && (
  in_category('ilustracoes', $post) || in_category('ilustracao-em-acao', $post) || 
  in_category('hqs', $post) || in_category('ecomic-hqs', $post) || 
  in_category('tailer-hqs', $post) || in_category('video', $post) || 
  in_category('quick-sketch', $post)
 )) {
  $new_url = str_replace('http://mbeck.com.br', 
                         'http://arte.mbeck.com.br',
                         get_permalink($post->ID));
  wp_redirect($new_url, 301);
  exit;
 }
}

Linha por Linha

A primeira linha adiciona uma nova ação ao template.

add_action('template_redirect', 'redirect_category_posts');

Em seguida eu crio a função e utilizo a global $post do WordPress. Nela teremos os dados da publicação.

function redirect_category_posts() { 
  global $post;

Adiciono uma condição para verificar se estamos em um post único através do $post->ID. Para verificar se encaixa em uma das categorias especificadas uso a função in_category do WordPress.

if (is_single($post->ID) && (
 in_category('ilustracoes', $post) || in_category('ilustracao-em-acao', $post) || 
 in_category('hqs', $post) || in_category('ecomic-hqs', $post) || 
 in_category('tailer-hqs', $post) || in_category('video', $post) || 
 in_category('quick-sketch', $post) 
)) {

Em seguida monto a URL que será utilizada para o redirecionamento substituindo o domínio antigo pelo novo com a função str_replace do PHP. Para pegar o link permanente do post eu uso a função get_permalink do WordPress.

  $new_url = str_replace('http://mbeck.com.br', 
                         'http://arte.mbeck.com.br', 
                         get_permalink($post->ID));

Lembrando que quando criei outro blog com o WordPress e importei o conteúdo do antigo eu utilizei exatamente o mesmo formato de URL (permalink) para os posts do novo blog que eu utilizava no antigo.

Para fechar, utilizo a função wp_redirect do WordPress, com um código 301 (código HTTP que significa movido permanentemente), e termino com um exit.

  wp_redirect($new_url, 301); 
  exit; 
 } 
}

E voilá! Está funcionando como o esperado.

Se ficou alguma dúvida comente abaixo.

Nos vemos na próxima.

Categorias
Ilustrações Quadrinhos Tech

Portfolio online

Esses dias andei lendo dicas pra quem quer mostrar seu trabalho na web e notei que meu blog não me ajudava nesse sentido. Tanto na parte de ilustrações e quadrinhos, que é o que mais mostro por aqui, quanto na minha atual profissão que é desenvolvedor de sistemas web.

Então resolvi ressussitar minhas galerias de portfolio de trabalhos para web e criar uma para as ilustrações e quadrinhos. Ambos estão agora disponíveis como páginas fixas aqui no blog.

Qualquer contato profissional pode ser feito através do email mvbeck no gmail.com.

Categorias
Crônicas Tech

Vai saber, né?

Conversando com meus colegas no trabalho esses dias, percebi o quanto é comum pessoas da área do TI fazendo os famosos freelas. O trabalho freelance é algo presente na vida não só dos programadores, mas também dos designers, jornalistas, ilustradores, etc. Por que será? Posso responder isso em relação à programação pelo menos.

As empresas não pagam o suficiente? Talvez sim, principalmente aquelas que buscam estagiários com experiência (onde já se viu isso!?), mas também porque normalmente precisamos de algum a mais no final do mês ($$) e sempre tem alguém precisando de um sistema pra isso, um site pra aquilo.

Se todos pudéssemos trabalhar apenas as oito horas padrão (ou menos, né?) seria tranquilo, mas as vezes parece que elas são apenas a metade do expediente.

Atualmente tenho entrado neste mundo do freelance e posso dizer com todas as letras: quem iria recusar a oportunidade de ganhar aquele dinheiro que tava faltando? Ainda mais sendo algo que você está acostumado a fazer todos os dias. É quase como fazer horas extras, mas ganhar bem melhor por cada uma delas.

Dormir é para os fracos! =P

Temos que aproveitar enquanto somos jovens e temos energia de sobra pra correr atrás e fazer seu pé-de-meia, pois um dia eu sei que não vou precisar mais das horas extras… ou não. Vai saber, né?