Utilizando o WordPress com MU-Plugins

Olá pessoal, venho aqui deixar uma dica rápida, sem delongas, sobre um recurso muito útil disponível aos desenvolvedores WordPress. Este recurso, embora pouco mencionado, está descrito no codex do WordPress, onde encontramos um pouco sobre sua história e explicações sobre o funcionamento, inclusive advertindo sobre seu uso indiscriminado.

Bom, em resumo, o que são plugins “MU” (Must Use)? São códigos (plugins, mas não qualquer plugin, falarei mais adiante sobre isso) que não podem ser desativados através do painel administrativo, ou seja, uma vez colocados no devido local dentro da aplicação, na primeira execução (carregamento de uma página no browser), ele é automaticamente reconhecido e ativado. “Muito bom!!! Maravilha, vou sair usando!” Se você pensou assim, cuidado! O sistema não emitirá qualquer alerta sobre atualizações, além de que devem ser desenvolvidos para ser “mu”. Ações como “register_activation_hook” e “register_deactivation_hook” não funcionarão e erros de código não farão com que o WordPress force desativação do plugin (como ocorre com plugins convencionais), portanto poderão facilmente quebrar o site.

 

Onde posso colocar um MU-Plugin?

Normalmente em uma pasta chamada “mu-plugins” em “wp-content” (padrão), mas você pode determinar qualquer outro local, definindo a constante “WPMU_PLUGIN_DIR” (e WPMU_PLUGIN_URL) em “wp-config.php.


define('WPMU_PLUGIN_DIR', ABSPATH.'uma-pasta/meus-mu-plugins');
define('WPMU_PLUGIN_URL', $_SERVER['SERVER_NAME'].'/uma-pasta/meus-mu-plugins');

Aqui vem uma questão de extrema importância, o WP vai carregar apenas arquivos PHP no primeiro nível de WPMU_PLUGIN_DIR, qualquer pasta colocada lá, será ignorada assim como todo o seu conteúdo (veja em “wp-includes/load.php” a declaração da função “wp_get_mu_plugins()”. Na versão 4.1.1, fica na linha 500). Por isso, não adianta pôr um plugin qualquer lá, além de, que normalmente utilizam-se de funções como “plugin_dir_path” em sua estrutura.

 

Então não posso criar um plugin estruturado em uma pasta?

Claro que pode, mas você terá de usar “require” ou “include” para executá-los. Vou mostrar como tenho trabalhado para carregar meus MUs: no meu diretório definido na constante, adiciono apenas um arquivo php (“load.php“, por exemplo) com o seguinte código:

<?php
$_dirOpen = opendir(dirname(__FILE__));
while (($_item = readdir($_dirOpen))) {
    if ((!is_file($_item)) && (!strpos($_item, '.'))) {
        if ($_item != '.' && $_item != '..') {
            foreach (glob(WPMU_PLUGIN_DIR . '/' . $_item . '/*.php') as $_plugin_file) {
                include_once($_plugin_file);
            }
        }
    }
}closedir($_dirOpen);

Depois disso, adiciono pastas com suas estruturas e códigos, que por padrão ponho apenas um arquivo na raiz, onde incluo o seguinte código:


// Estas variáveis globais dentro plugin, utilizo nos locais
// onde normalmente usaria "plugin_dir_path()" ou "plugins_url()"
$mdb_this_directory     = WPMU_PLUGIN_DIR.'/nome-bueno-plugin';
$mdb_this_url           = WPMU_PLUGIN_URL.'/nome-bueno-plugin';

$_dirOpen = opendir(dirname(__FILE__));
while(($_item = readdir($_dirOpen))){
    if((!is_file($_item)) && (!strpos($_item, '.'))){
        if($_item != '.' && $_item != '..'){
            $_itemDirOpen =  opendir(dirname(__FILE__).'/'.$_item);
            while(($_itemDir = readdir($_itemDirOpen))){
                if(strpos($_itemDir, '.php')){
                    include_once($mdb_this_directory.'/'.$_item.'/'.$_itemDir);
                }
            }
        }
    }
}

Todos os arquivos PHP dentro das pastas serão incluídos. Uso uma estrutura de pastas assim: ‘admin’, ‘css’, ‘js’ , ‘functions’, ‘images’, por exemplo. Em “admin”, códigos mais referentes a interface administrativa (se houver), em “functions”, um arquivo functions.php (mas podem haver outros), onde além de outras funções, ações como “wp_enqueue_style” e “wp_enqueue_script”, que chamarão os JS e CSS.

Em que situações isso poderia ser útil?

Suponhamos que você desenvolva um site para um cliente e fique acertado um contrato de suporte. Você entrega para o cara uma conta de “Administrador” e ele acaba excluindo a conta administrativa do desenvolvedor, e ainda perde a própria senha. Claro que você poderia resolver pelo código, recriando o usuário administrador, mas se em um mu-plugin, você mantivesse um script com um filtro que impedisse a exclusão do usuário com “ID = 1”?

Você, com certeza, vai pensar em várias outras aplicações.

Mas não esqueça de conferir a descrição do Codex sobre o assunto.

Espero que lhe tenha sido útil. Se sim, ou se quiser acrescentar alguma ideia ou pergunta, deixe seu comentário

Como Tornar o WordPress Privado Sem Plugin

Como muito se fala por aí, o WordPress é, além de fácil, muito funcional. Ele é bom para blogs e sites institucionais, mas alguns ainda o usam como um site fechado, onde apenas usuários logados tem acesso ao conteúdo publicado. Normalmente, para isso, se instala um plugin (como Members Only, por exemplo). Embora os plugins sejam úteis, em excesso atrapalham (o WordPress, por natureza já é pesado).

Assim sendo, quero mostrar aqui uma forma muito simples de fazê-lo sem necessidade de instalação de plugins (e claro, sem alterar códigos do WordPress em si).

Primeiro, precisamos considerar que todas as páginas do site carregam o conteúdo do arquivo “header.php” existente na pasta do template ativo, mas antes de chegar às primeiras linhas do referido arquivo (“<!DOCTYPE html> <html lang=”pt-br”>…”), o WordPress já trabalhou bastante, carregando ações e filtros de plugins, e muito mais, inclusive verificando no banco de dados qual tema instalado está ativo, para então exibir seu layout. Podemos então dizer ao sistema que antes de carregar qualquer página do site, cheque se o visitante é um usuário logado no site ou não, e se não, o conduza imediatamente à página de login.

Como fazer?

Utilizando um cliente de FTP (preferencialmente um que funcione atrelado a um IDE PHP, Notepad++, por exemplo), ou ainda dentro do seu painel administrativo, no item “Aparência” e subitem “Editor” (nesse caso, será carregado o arquivo “style.css“, mas há uma lista de arquivos à direita), abra o header.php, que fica em “wp-content/themes/[nome-do-tema]/”, e inclua este código imediatamente antes ao “<!doctype…”:

<?php

if(!is_user_logged_in()){
$redir = home_url().’/wp-login.php?redirect_to=’.home_url();
header(“location:$redir”);
}
?>

Se o usuário não está registrado (“if(!is_logged_in()){…”), definimos que deve ser redirecionado à página de login, e que após logar-se, seja remetido à página inicial do site (“redirect_to=’.home_url()’; “).

login

Gostou? E o que você acha de personalizarmos um pouco mais esta tela? Seu site (ou do seu cliente) poderá ter uma aparência mais profissional se ao invés do logo padrão do WordPress (com link para wordpress.org) você adicionar seu próprio logo e com link para a página inicial do site.

Personalizando a tela de login

Para isso, primeiro tenha em mente qual imagem você vai  adicionar (dê preferência para fundo transparente), com algo em torno de 300px x 100px. Se ela já está na sua biblioteca, vai precisar do URL dela, caso não, pode fazer upload para uma pasta “images” na pasta raiz do seu domínio no host ou na de mesmo nome no diretório do seu tema.

Feito isso, abra agora o arquivo “functions.php” do tema e adicione no final o código abaixo, personalizando conforma suas preferências.


function custom_login() {
$meulogo = get_option('siteurl').'/images/logo.png';
// nesta variável setamos o caminho do logo que queremos exibir
// se optarmos por deixar na pasta "images" do tema, trocamos
// de "get_option('siteurl')" por "get_bloginfo('template_directory')"
echo '
<style type="text/css">
body{
background-color:#ffffff;
}
.login h1 a{
width: 100%;
background-image:url('.$meulogo.') !important;
background-size: 330px 110px!important;
height: 110px;
}
#loginform{
color: #eeeeee;
border-radius: 23px 23px 23px 23px;
background-color: #444444;
}
</style>
<script type="text/javascript">
li = document.getElementsByTagName('a');
li[0].href="'.get_option("home").'";
li[0].title="'.get_option("blogname").'";

</script>
‘;

}
add_action(‘login_footer’, ‘custom_login’);

Veja como ficou o mesmo código aqui no MDBUENO.COM:

login-custom

Claro que o captcha tem nada a ver com o tema do nosso artigo, ele foi adicionado através do plugin “SI Captcha Anti-Spam“, que inclusive é uma boa sugestão aos amigos.

Como pode ver, dei uma formatada pelo CSS inserido na página do login, o que você pode fazer segundo sua imaginação se tiver algum conhecimento de folhas de estilo em cascata (linguagem CSS).

Caso haja dúvidas, você pode perguntar nos comentários. Abraço!

Publicando no WordPress com Microsoft Word

Há algum tempo testei o Windows Live Writer, aplicativo da suíte do Windows Live Essentials, para publicar novos posts em uma instalação do WordPress. Naquela época escrevi sobre a experiência. Hoje resolvi testar o mesmo feito com uma ferramenta diferente, não gratuita como o Live Writer, mas muito mais popular, O Microsoft Word 2010.

Como fazer? Muito simples. Basta abrir o Word, clicar na “Guia Arquivo”, e no menu de opções vertical, no lado esquerdo, clicar em “Novo”. Ao ver as opções de “modelos” de documentos do Word, você verá: “Postagem no Blog”. Selecione esta opção e, na direita, clique em “Criar”.

Na primeira vez que você faz o procedimento, é necessário configurar sua conta de blog. Observe as imagens abaixo:

doc-word-novo

Essolha “Registrar Agora”.

doc-word-novo-reg

Selecione a opção “WordPress”.

doc-word-novo-reg-wp

Entre com suas informações de login. Não esqueça de digitar o endereço do seu blog/site (substituindo “<Digite a URL do host do blog aqui>”). Marque “Lembrar Senha” e clique em “OK”.

doc-word-novo-reg-wp-dados

Pronto, a partir de agora você poderá utilizar o Word para postar em seu blog ou site WordPress. Caso queira modificar, adicionar ou excluir contas, poderá fazê-lo clicando em “Gerenciar Contas”.

doc-word-novo-reg-wp-dados-post

Por que usar WordPress?

O WordPress é o CMS (Content Management System – Sistema de Gerenciamento de Conteúdo) mais popular do mundo, mas antes de entrar no assunto proposto, é interessante falar sobre porquê usar um CMS.

A utilização desse tipo de plataforma nos fornece grande facilidade na publicação e manutenção de um blog ou site. Dentre os principais, podemos destacar o Joomla, Drupal e, é claro, o WordPress. Também existem caras como o Magento e PrestaShop, estes dedicados a lojas virtuais. Porque utilizá-los? Principalmente pela facilidade em personalizar e administrar o conteúdo, pois em geral não requerem conhecimentos em programação (os softwares citados acima estão baseados em liguagem PHP e banco de dados MySQL). Atividades como escrever um novo artigo, fazer upload de fotos, criar novas páginas, personalizar cor de fundo, etc. normalmente podem ser feitas pelo painel de administração.

A escolha do WordPress pode ser justificada tanto no aspecto leigo da configuração/administração de um site quanto no aspecto técnico, quando se possui conhecimentos de desenvolvimento em tecnologias web, neste caso, PHP, banco de dados, FTP, HTML, CSS e JavaScript.

Devido a praticidade e simplicidade do ambiente administrativo, a curva de aprendizagem do WordPress é muito pequena (Joomla e Drupal são mais difíceis), assim a tarefa de dar treinamento ao cliente no momento da entrega do site se torna muito tranquila.

O WordPress é um software gratuito (WordPress.org), mantido por uma grande comunidade de desenvolvedores, contando com ampla documentação (grande parte já disponível em português) que auxilia na “construção” de blogs, sites e portais bonitos e muito funcionais.

E quando é necessário uma funcionalidade não disponível? É simples, procura-se um plugin no repositório da comunidade, e se não existe um adequado, desenvolve-se. Um plugin consiste em um software que irá funcionar “plugado” na instalação do WordPress, de forma a alterar o comportamento do sistema ou estender funcionalidades. Por exemplo, para adicionar um formulário de contato, temos o Contact Form 7, mas caso se queira transformar o WordPress em uma rede social, temos o BuddyPress.

Quanto ao layout? Existe uma enorme quantidade de temas gratuitos e pagos disponíveis, os quais podem ser usados como estão ou personalizados, mediante alterações em seu código (PHP e CSS, basicamente). Caso se tenha conhecimento suficiente, pode-se desenvolver um novo.

Considerando a estrutura que o CMS possui, o tempo de criação de um site simples pode ser menos de uma semana, desde que se encontre o tema ideal rapidamente e os requisitos do cliente não demandem personalizações pesadas de código.

Bom, isso é apenas um resuminho. Mais adiante entraremos em detalhes sobre o WordPress e outros assuntos.