Desenvolvimento Web

Anotações de trabalhos em WordPress #01

Praticamente finalizando dois novos projetos em WordPress, quero documentar as soluções que adotei em ambos projetos.

Custom Post Type UI – plugin para criar Tipos de Posts Customizados (com recurso de escolher ícone no menu interno do WordPress, assim como já ajustar tradução, criar Taxonomias, etc)

Advanced Custom Fields – plugin para criar novos campos, seja em Posts e Page (padrões do sistema), seja para novos Custom Post Types.

WP Bulk Delete – plugin para apagar conteúdos em massa. Testei outras soluções, mas esse foi o que eu mais gostei, pois me permitiu apagar termos de taxonomias, assim como posts de Custom Post Types.

WP All Import Pro – permite importar conteúdos à partir de um arquivo csv ou xml. Com ele consegui mapear os campos de uma planilha CSV e inserir exatamente nos campos que eu queria no Custom Post Type, incluindo diferentes taxonomias.

Max Mega Menu – gosto de usar esse plugin para montar  e customizar menu, já vem com opção responsiva e na versão pro tem opção de inserir logo.

MetaSlider -Uma solução simples para slide/carrossel e muito funcional. Testei várias soluções e essa foi a que eu mais gostei para solução simples e responsivo.

Contact Form 7 – Oferece recursos interessantes para formulário de contato. Uso em todos meus projetos.

PHP Code Widget – quando algum tema ou builder não tem a funcionalidade que você precisa e é necessário inserir um código php extra e inserir o resultado no template via Widget.

Recent Posts Widget Extended – Gostei dessa solução porque permitiu trabalhar com posts recentes de Custom Post Types e customizar a saída de forma bem simples.

WordPress Popular Posts – De forma bem simples é possível mostrar tantos conteúdos de Posts, como de Page ou Custom Post Types; e possibilidade de customizar a saída de forma simples.

Search & Filter Pro – De forma bem simples conseguir montar uma formulário de busca avançada de um Custom Post Type com Taxonomias.

NextGEN Gallery – Testei várias soluções para galeria, mas essa é o que permitiu as customizações e visualizações que queria; um ponto a mais foi de criar uma customização para miniatura.

Menu Icons by ThemeIsle – Precisei colocar um ícone da rede social no menu e com o link da mesma… com esse plugin conseguir resolver de forma fácil.

MailChimp for WordPress – Integra de forma fácil com o Mailchimp e opções bacanas de customização.

Related Posts by Taxonomy – A primeira solução que testei e já resolveu o meu problema de relacionamento de conteúdos com termos de taxonomias de custom post types.

Yoast SEO – uma ótima solução para SEO

Slider Revolution – uma solução sensacional para criar slider/carrossel avançados.

Padrão
Sem categoria

Migrando SPIP para WordPress

Alguns anos atrás tive que migrar um site feito em SPIP para WordPress e documentei o processo no meu wiki. Tentei reutilizar essa documentação hoje e não deu certo, isso porque o importação no WordPress é a partir de um arquivo XML que o SPIP exportava por padrão nas versões 1.9 e 2.0 e não versão acima de 3.x o sistema de backup nativo do SPIP gera um arquivo .sqlite.

Fiz uma pesquisa e encontrei uma excelente solução: FG SPIP to WordPress. Essa solução importa as matérias (transformar em posts), as imagens do logotipo das matérias (virando Imagem Destacada) e as Seções (tornando-se Categorias).  Resolveu perfeitamente o meu problema.

No caso de necessidade de importar os usuários também a solução é usar o plugin Migrate SPIP Users.

Faltou uma solução para migrar comentários e palavras-chaves. Mas aí é outro assunto.

Padrão
Sem categoria

Adicionando localização de menu em WordPress

Se você precisa adicionar uma nova localização do WordPress é só acrescentar no arquivo functions.php algo como

if (function_exists('add_theme_support')) {
    add_theme_support('loja');
}

e depois no template você coloca

<?php     wp_nav_menu( array('menu' => 'loja',
    ));
?>

Depois você cria um novo menu em Aparência > Menu e em Gerenciar Posições você vincula o novo menu a localização Loja.

Mais informações em https://codex.wordpress.org/Navigation_Menus

Padrão
Sem categoria

Limitando visualização do conteúdo só na home do WordPress e Woocommerce

Sempre aparece a necessidade de determinado conteúdo ser apresentado somente na home do site em WordPress. Esses dias precisei fazer isso num projeto em Woocommerce (uma solução para loja virtual em WordPres), e duas soluções são:

<?php if ( is_home() || is_front_page() ) : ?>
<h2>Aparece só na Home</h2>
<?php endif ?>
<?php wp_reset_query(); ?>

e para Woocommerce

<?php if ( is_shop() || is_front_page() ) : ?>
<h2>Aparece só na Home</h2>
<?php endif ?>
<?php wp_reset_query(); ?>
Padrão
Sem categoria

Envio de mensagens em CMS feito em PHP

Sempre que monto um servidor eu já configuro o Exim ou SSMTP para enviar as mensagens do sistema e também de CMS (como o Drupal, WordPress ou SPIP). Mesmo usando bibliotecas como PHPMailer é necessário que tenha um serviço de SMTP rodando ou configurar um externo.

Para testar se o servidor está devidamente configurado você pode fazer a partir do prompt do PHP:

php -a
mail ('seuemail@seudodominio.com.br', "Test Postfix", "Test mail from postfix");
exit ();

outra opção é criar um arquivo php com o nome testmail.php

<?php
    mail ('seuemail@seudodominio.com.br', "Test Postfix", "Test mail from postfix");
?>

E depois rode o comando php -f testmail.php e será a mensagem será enviada para o endereço indicado.

Se acaso você tiver acesso o servidor via SSH tem a opção


echo "Test from Postfix" | mail -s "Test" seuemail@seudodominio.com.br

No caso de projeto rodando tem o plugin Check Email que ajuda teste o servidor local.

Para quem utilizar algum sistema de newsletter é bom saber Como enviar Emails pelo WordPress.

Muitos parceiros/clientes utilizam o serviço de hospedagem da Locaweb e por padrão não é oferecido o servidor de SMTP e aí é necessário com um servidor externo e seguindo as orientações da própria Locaweb.

Algumas informações desse post foi retirado de Checking if PHP/WordPress can send mails.

Padrão
Sem categoria

Bloqueando lista de sub-diretórios e arquivos

Aqui no laboratório sempre estou com demandas diferentes, tem que se aperfeiçoar constantamente, vida de SysAdmin.

Estou estudando bastante segurança de WordPress e uma ferramenta que ajuda bastante é o wpscan e observando um site de um parceiro apareceu que um diretório sensível estava público.  No caso o diretório uploads fica aberto acessando por http://localhost/wordpress/wp-content/uploads e usando programas como httrack ou wget é possível baixar todos arquivos recursivamente e montando a mesma estrutura no ambiente local.

ruby ./wpscan.rb --url http://localhost/wordpress
httrack http://localhost/wordpress/wp-content/uploads/iphorm/ -b1 +*

Então fiz um estudo rápido de como proteger essa falha aberta e achei duas soluções, uma consistia em criar um arquivo index.html em todos os diretórios e sub-diretórios recursivos, para tal a melhor solução que achei foi com uma junção do comando find com touch e ficou assim:

find . -type d -exec touch {}/index.html \;

Outra solução é criar um arquivo .htaccess com o conteúdo
Options -Indexes

Acrescentando assim uma nova instrução ao apache, sem necessidade de ter autorização do administrador do servidor.

De cara não funcionou aqui no meu ambiente de desenvolvimento, que roda um openSUSE e tive que fazer alguns ajustes no apache, acrescentando no arquivo /etc/apache2/httpd.conf

<Directory “/srv/www/htdocs”>
AllowOverride All
</Directory>

Aí sim funcionou!

Os comandos utilizados foram para conhecer melhor as vulnerabilidades foram

Padrão