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

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

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

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

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