Quem trabalha com o WordPress, sobretudo bloggers e escritores de publicações online, podem já se ter deparado com um problema extremamente complicado: como evitar clicar no botão “Publicar” por engano? O problema pode parecer trivial, pois qualquer post publicado pode voltar a ser rascunho muito facilmente, porém, publicar um post inacabado e despublicá-lo em seguida pode levar a sérios problemas para o seu blog. Entre um desses problemas está o facto de que o WordPress contacta os serviços de publicação tais como o Technorati informando da publicação de um novo post, ou seja, tanto os seus leitores habituais como todo o resto do mundo fica informado dessa publicação e recebe o link para ela. Caso você despublique um post os seus leitores podem entrar num link que não existe, levando você a perder seus leitores na próxima publicação.
Foi por essa razão que criámos o plugin Prevenir Publicação e que disponibilizamos na integra para download aqui. Após instalado, este plugin previne que você publique seus posts inadvertidamente, apresentando uma caixa de confirmação após você clicar em publicar.
{filelink=4}
Atenção: o plugin foi testado na versão 3.4 do WordPress.
INSTALAÇÃO
Instalar o plugin é bastante simples e fácil. Você só precisará ter acesso à administração do seu blog e a permissão de instalação de plugins.
- Entre na administração e vá até “Plugins”
- Clique em “Adicionar Novo”
- Clique em “Fazer Upload”
- Faça o download do plugin no link em cima e guarde-o num local onde você possa aceder
- Escolha o ficheiro ZIP do plugin e faça o upload
- Clique em “Ativar o plugin”
DESVENDANDO O CÓDIGO DO PLUGIN
Como sempre, irei mostrar-lhe como o plugin está criado mostrando e explicando passo-a-passo o código do plugin. De maneira a atingirmos o objetivo que pretendemos necessitamos de usar código jQuery que irá adicionar uma função ao evento “click” do botão publicar, isto caso o post atual ainda não tenha sido publicado.
Se você descarregar o plugin você verá incluso no arquivo ZIP dois ficheiros e uma diretoria. Um ficheiro PHP que dirá ao WordPress que é um plugin e outras informações para incluir o segundo ficheiro, o nosso código jQuery.
A diretoria languages contém ficheiros de tradução para português de Portugal e para o Brasil. Você poderá editá-los se pretender alterar suas strings. Uma das possibilidades que temos para os plugins atualmente e que muitos developers desconhecem é que o cabeçalho dos plugins poderá também ser traduzido.
Abrindo o ficheiro prevent-publish.php é possivel visualizar o seguinte cabeçalho logo de início:
/* Plugin name: Prevent Publish Plugin URI: https://www.escolawp.com/ Version: 0.1 Text Domain: prevent-publish Domain Path: /languages/ Author: Escola WordPress Author URI: https://www.escolawp.com/ Description: A confirmation dialog is displayed when you hit the "Publish" button of your post. This plugin prevents unwanted publications until you finished your post. License: GPL3 */
Este cabeçalho é essencial para que o WordPress reconheça o ficheiro como um plugin que pode ser ativado. Poderá consultar no meu último artigo sobre Como criar plugins específicos para o seu blog WordPress mais informações sobre os cabeçalhos dos plugins. Dentro deste cabeçalho devemos notar duas tags importantes para que a tradução do cabeçalho seja possível: Text Domain e Domain Path. Estas duas tags indicam ao WordPress qual o textdomain do plugin e onde é que ele pode ir buscar e carregar os ficheiros de tradução para a língua atual.
Como carregar ficheiros de script na administração do WordPress
Mais abaixo, no fundo do ficheiro, vemos o seguinte código:
function ewp_prevent_publish_admin_head_script() { wp_enqueue_script( 'ewp-prevent-publish', plugin_dir_url( __FILE__ ) . 'prevent-publish.js', array( 'jquery' ), '1.0', true ); wp_localize_script( 'ewp-prevent-publish', 'ewp_prevent_publish', array( 'confirm_text' => __( 'Do you really want to Publish?', 'prevent-publish' ), ) ); } add_action( 'admin_print_scripts-post.php', 'ewp_prevent_publish_admin_head_script' ); add_action( 'admin_print_scripts-post-new.php', 'ewp_prevent_publish_admin_head_script' );
A acção responsável por registar o nosso ficheiro script apenas às páginas de criação e edição de posts é a admin_print_scripts seguido do nome do ficheiro PHP da administração onde você pretende carregar o JS. No nosso caso pretendemos carregar no post.php e no post-new.php. Você pode criar o seu próprio ficheiro JS e carregá-lo em qualquer página usando a mesma técnica, apenas necessitará de procurar na URL o nome do ficheiro PHP pretendido.
O código jQuery – a “magia” do javascript!
Se você abrir o outro ficheiro do plugin, o prevent-publish.js você verá o código jQuery que será incorporado na administração.
jQuery(document).ready(function($){ if ( $('input#publish').attr('name') != 'publish' ) return; $('input#publish').click(function(e){ $('#ajax-loading').hide(); $('#publish').removeClass('button-primary-disabled'); $('#save-post').removeClass('button-disabled'); if ( confirm( ewp_prevent_publish.confirm_text ) ) { $('#ajax-loading').show(); $('#publish').addClass('button-primary-disabled'); $('#save-post').addClass('button-disabled'); return true; } else { return false; } }); });
Desvendando apenas um pouco de cada pedaço do código:
jQuery(document).ready(function($){
Esta parte diz ao jQuery para carregar a função em anexo (onde o nosso código reside) apenas quando a página (document) estiver totalmente carregada (ready) e passa o símbolo $ como um wrapper para o objeto jQuery de maneira a não termos que escrever jQuery em todo o início de linha, podendo ser usado para o efeito o símbolo $.
if ( $('input#publish').attr('name') != 'publish' ) return;
Esta linha de código é apenas uma hack de maneira a que esta função apenas se aplique quando o post não estiver publicado, pois de outra maneira não faria sentido. Tivemos que procurar uma forma de desvendar essa condição e acabámos por descobrir uma forma não muito ortodoxa para estes casos, no entanto serve. Nesta linha a clausula if procura se o atributo name do botão de publicar (que contém id=”publish”) tem o valor diferente de publish, ou seja, se este botão não accionar a publicação do post quer dizer que o post já se encontra publicado, retornando a função.
Esta é a linha do HTML que produz o botão de publicar no painel do WordPress:
<input type="submit" name="publish" id="publish" class="button-primary" value="Publicar" tabindex="5" accesskey="p">
Quando se clicar no botão para publicar um post este mostra uma caixa de confirmação para que você possa decidir se quer realmente publicar o post ou não:
Mais uma vez esperamos que este plugin ajude bloggers e autores a poderem controlar melhor seus posts e blogs WordPress.
{filelink=4}
Atenção: o plugin foi testado na versão 3.4 do WordPress.
Até breve!