Como carregar o Dashboard do seu WordPress mais rápido

O Dashboard do WordPress em muitas das vezes é a primeira página que você acessa quando vai administrar o seu blog. Então, carregá-la mais rápido vai lhe ajudar administrar o seu blog com um menor tempo.

Afinal de contas, há posts para serem escritos; comentários esperando por moderação, entre outras opções.

O Dashboard do WordPress tem por objetivo lhe mostrar as últimas atividades ocorridas em seu blog, no Blog oficial de desenvolvimento do WordPress e no WordPress Planet.

Para lhe mostrar as últimas atividades que aconteram em seu blog, o Dashboard exibe o box Latest Activity, contendo as seguintes opções:

  • Incoming Links (os sites que estão linkando para o seu blog);
  • Comments (os últimos comentários realizados nos posts do seu blog);
  • Posts (relação dos posts escritos recentemente);
  • Blog Stats (simples estatísticas sobre o seu blog);
  • Spam (quantidade de comentários spam barrado pelo Askimet).

Já as demais informações, ou seja, os últimos posts do blog oficial de desenvolvimento do WordPress e os do WordPress Planet são exibidos através da leitura remota dos feeds desses blogs. O que em algumas das vezes torna o carregamento do seu Dashboard lenta.

Então para que o seu Dashboard carregue mais rápido, você precisa excluir os códigos responsáveis por essa leitura remota dos feeds ou ocultá-los. Lhe explico como:

No arquivo index.php localizado dentro do diretório wp-admin é o seu Dashboard propriamente dito. Nesse arquivo, os códigos estão localizados entre as linhas 127 à 164 (em meu caso). Então, temos duas opções a serem feitas com esses códigos: excluí-los ou ocultá-los. Recomendo a segunda opção.

Então, anteriormente a linha 127, adicione o seguinte código:

<?php if ( isset($_GET['dashboard_external_info']) ) { ?>

E posteriormente a linha 164 este:

<?php } // fechando o dashboard_external_info ?>

Após a inserção dos códigos informados acima, as informações externas ficarão ocultas, para exibí-las basta ir até a URL e acrescentar: ?dashboard_external_info=true. Dessa forma a URL do seu Dashboard ficará assim:

http://leandro.w3invent.com.br/wp-admin/index.php?dashboard_external_info=true

Ou assim:

http://leandro.w3invent.com.br/wp-admin/?dashboard_external_info=true

Faça os testes e observe o seu Dashboard com uma nova performance de carregamento :)

Solução para limpar e resgatar o valor default do atributo value de um campo

Criei uma solução super simples e prática com o intuito de limpar e resgatar o valor default do atributo value de um campo de formulário. Observe o script:

/**
 * manager_field_default_value (0.1) - 28/12/2006
 * Leandro Vieira Pinho
 * Localize-me. Blog: [ http://leandro.w3invent.com.br ], E-mail leandro[at]w3invent[dot]com[dot]br
 */
var manager_field_default_value = {
	objFieldId: 'id_do_campo',
	start: function() {
		objField = this.$(this.objFieldId);
		objField.onclick = function() {
			manager_field_default_value.clearDefaultValue();
		}
		objField.onfocus = function() {
			manager_field_default_value.clearDefaultValue();
		}
		objField.onblur = function() {
			manager_field_default_value.backDefaultValue();
		}
	},
	clearDefaultValue: function() {
		if ( this.$(this.objFieldId).value == this.$(this.objFieldId).defaultValue ) {
			this.$(this.objFieldId).value = '';
		}
	},
	backDefaultValue: function() {
		if ( this.$(this.objFieldId).value == '' ) {
			this.$(this.objFieldId).value = this.$(this.objFieldId).defaultValue;
		}
	},
	$: function(strObjId) {
		return document.getElementById(strObjId);
	}
}

Para usá-lo, você precisará informar apenas o atributo ID do campo desejado. E essa informação é atribuída na propriedade objFieldId. No exemplo acima, coloquei como exemplo: id_do_campo. Uma vez configurada tal propriedade, o script saberá com qual campo de formulário ele irá trabalhar.

Feita isso, você precisa apenas chamar o método start() após a página ser carregada – window.onload. O método deve ser chamado assim:

manager_field_default_value.start();

A lógica do script é a seguinte:

Ao clicar no campo de formulário informado ou quando ele receber um foco. Será verificado se o seu valor é igual ao valor atribuído ao atributo value. Caso sim, será chamado o método clearDefaultValue que deixará o campo em branco. Quando o campo perder o foco – onblur – será verificado se o valor está em branco, se tiver voltamos com o valor default do campo :)

Ler arquivos remotos com PHP na DreamHost

Durante todo o dia, estive desenvolvendo alguns recursos para um projeto em que estou envolvido. E para tal utilizei a função file do PHP. Uma vez que se fazia necessário a leitura remota de arquivos.

Meu código era mais ou menos o seguinte:

$arrLinhasPagina = file($url);
foreach( $arrLinhasPagina as $strLinha ) {
	// fal algo
}

Mas ao testar o sistema on-line recebi uma mensagem de erro, um tanto quanto inesperada por mim (já é tarde, quero dormir.) que me informava o seguinte: “URL file-access is disabled in the server configuration in [...]“. Caramba não funcionou, e agora José? A solução foi a de sempre.

E com isso, descobri que a DreamHost desabilita a opção allow_url_fopen que nos permite abrir, ler, incluir um arquivo remoto, entre outras opções. A alternativa é utilizar a cURL library.

Então, o código demonstrado acima teve que ser refeito, e assim foi. Resultando no seguinte:

$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 0);
$file_contents = curl_exec($ch);
curl_close($ch);
$arrLinhasPagina = explode("n",$file_contents); // Há uma \ (barra invertida) junto ao n.
foreach( $arrLinhasPagina as $strLinha ) {
	// fal algo
}

Este foi meu desafio de hoje e espero que a solução também possa ser útil a vocês.

Mais informações a respeito.

Plugins e seus indesejáveis espaços em branco

O Bruno Torres recentemente postou sobre o dilema: plugins e seus indesejáveis espaços em branco, leia Cuidado com os espaços que você coloca em seus plugins wordpress.

Como ele informou, um espaço em branco antes da declaração XML do feed pode arruinar a codificação dos caracteres, substituindo os caracteres acentuados por pontos de interrogação. E impedindo que seu feed seja validado.

Fiz uma investigação aqui no meu blog com os plugins que tenho instalado. E detectei dois deles que fazem esse trabalho “sujo”. São eles: Admin Drop Down Menu e Landing sites.

Se você está passando por problemas com seus feeds e tem os plugins informados ativados em seu WordPress, experimente desativá-los para viver feliz novamente com seus feeds; seus leitores agradecem :)

Agora criei um hábito sempre ao instalar um plugin aqui no blog: verificar se antes do DOCTYPE há um espaço em branco. Se houver, corro logo e já o desativo. Por que certamente o mesmo feito acontecerá no feed.

Solução para trabalhar com cookies em JavaScript

Estou envolvido com um projeto, o qual necessitou da utilização de cookies. Como o projeto se baseia totalmente (e somente) de forma client-side. Minha única solução foi o JavaScript :)

Com isto criei o w3cookies, uma forma simples e fácil para criar, ler ou deletar cookies. Observe o código abaixo:

/**
 * w3cookies (0.1) - 23/12/2006
 * Leandro Vieira Pinho
 * http://leandrovieira.com
 */
var w3cookies = {
	date: new Date(),
	// Cria o(s) cookie(s)
	// Forma de uso: w3cookies.create('nome_do_cookie','valor',dias_para_expirar);
	create: function(strName, strValue, intDays) {
		if ( intDays ) {
			this.date.setTime(this.date.getTime()+(intDays*24*60*60*1000));
			var expires = "; expires=" + this.date.toGMTString();
		} else {
			var expires = "";
		}
		document.cookie = strName + "=" + strValue + expires + "; path=/";
	},
	// Ler as informações de um cookie em específico
	// Forma de uso: w3cookies.read('nome_do_cookie');
	read: function(strName) {
		var strNameIgual = strName + "=";
		var arrCookies = document.cookie.split(";");
		for ( var i = 0, strCookie; strCookie = arrCookies[i]; i++ ) {
			while ( strCookie.charAt(0) == " ") {
				strCookie = strCookie.substring(1,strCookie.length);
			}
			if ( strCookie.indexOf(strNameIgual) == 0 ) {
				return strCookie.substring(strNameIgual.length,strCookie.length);
			}
		}
		return null;
	},
	// Delete um cookie desejado
	// Forma de uso: w3cookies.erase('nome_do_cookie');
	erase: function(strName) {
		this.create(strName,"",-1);
	}
}

Enjoy :)

Dúvidas? Comente aí.

Google e todos os seus Doodles

O Google iniciou o Doodles de Natal ou, Rabiscos de Natal. Se trata de uma brincadeira em que o maior buscador do mundo vai revelando sua logo temática para o Natal gradativamente.

Conheça a série completa dos Google Doodle na relação abaixo:

Gostaria de conhecer o Dennis Hwang? Não sabe quem é ele? Ok, ele é o designer das logos do Google. E abaixo relaciono duas matérias referentes a ele:

Diferenças entre os browsers ao interpretar JavaScript #1

Estou lançando uma série que pretendo manter aqui no blog: Diferença entre browsers ao interpretar JavaScript. Ela terá a simples intenção de arquivar algumas diferença que percebo duramente o meu dia-a-dia de desenvolvimento utilizando tal linguagem. Mas, como não quero manter isso só pra mim, decidir compartilhar e disponibilizar por aqui :)

Vamos ao primeiro exemplo de hoje, o qual me motivou a iniciar esta série. Observe o seguinte código:

// Seleciona todos os links contidos na página
var arrLinks = $tags('a');
// Loop entre os links selecionados
for ( var i = 0, objLink; objLink = arrLinks[i]; i++) {
	// Selecionamos o atributo rel do link em questão
	var objLinkAttRel = objLink.getAttribute('rel');
	// Descobrimos o tipo da varíavel que armazenou o atributo rel do link
	alert('Tipo: ' + typeof(objLinkAttRel));
}

Bom, o código está auto-explicativo (se não o compreendeu, comente). Observe o resultado obtido:

Como você percebeu, somente o Internet Explorer interpreta o tipo da variável como Object String. Então, se você faz um código assim:

...
var objLinkAttRel = objLink.getAttribute('rel');
if ( objLinkAttRel.substring(0,3) == 'foo' ) {
	// Faz alguma coisa
}

Com o intuito de verificar o conteúdo do atributo rel dos links selecionados, e testa somente no Internet Explorer, você verá seu script funcionando perfeitamente. Mas ao testar em outros navegadores – como o Firefox e o Opera – você terá uma mensagem de erro – objLinkAttRel has no properties. Isto por que você está utilizando um método – substring – para trabalhar com Objects Strings. E como eles não interpretam tal variável como Object String, certamente não funcionará.

Então, o que fazer para que tenhamos esse código de forma crossbrowser? Simples, ao selecionar o conteúdo do atributo rel dos links, iremos transformá-lo em um Object String. Para que todos os browsers o interpretam dessa maneira (como Object String). Observe:

// Seleciona todos os links contidos na página
var arrLinks = $tags('a');
// Loop entre os links selecionados
for ( var i = 0, objLink; objLink = arrLinks[i]; i++) {
	// Selecionamos o atributo rel do link em questão
	var objLinkAttRel = new String(objLink.getAttribute('rel')); // Observe: new String()
	if ( objLinkAttRel.substring(0,3) == 'foo' ) {
		// Faz alguma coisa
	}
}
}

Somente. Gosto sempre de trabalhar com vários navegadores abertos e testando tudo ao mesmo tempo, assim já identifico de imediato algumas divergências entre os navegadores e procuro uma alternativa para deixar meus códigos sempre de forma crossbrowser :)

Del.icio.us disponibiliza Widget – tagometer

O Tagometer disponibilizado pelo Del.icio.us exibe as tags e a quantidade de vezes que seu blog/site ou uma determinada página foi salva pelos usuários desse bookmark social.

Ele foi lançado em duas versões, uma indicada para as “sidebars” e outra para as entradas do blog. Confira essa novidade no Tagometer Badge.

Mais informações sobre o assunto nos dois posts listados abaixo: