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.

  1. Entre na administração e vá até “Plugins”
  2. Clique em “Adicionar Novo”
  3. Clique em “Fazer Upload”
  4. Faça o download do plugin no link em cima e guarde-o num local onde você possa aceder
  5. Escolha o ficheiro ZIP do plugin e faça o upload
  6. Clique em “Ativar o plugin”
E pronto, seguindo esses passos, você terá o seu plugin instalado e pronto a ajudá-lo nos casos em que você clique em “Publicar” inadvertidamente.

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!