SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
¸˜
             Introducao
               Sistemas
                    ¸˜
             Migracoes
            ¸˜
   Consideracoes Finais




                 ¸˜
    Grandes Migracoes
Passando de Qualquer Plataforma
       Para o WordPress


        Vinicius Massuchetto

          WordCamp Curitiba 2012


             Junho de 2012



   Vinicius Massuchetto                ¸˜
                          Grandes Migracoes
¸˜
                         Introducao          ¸˜
                                      Introducao
                           Sistemas          ¸˜
                                      Motivacao Para o Cliente
                                ¸˜
                         Migracoes           ¸˜
                                      Motivacao Para a Equipe de Desenvolvimento
                        ¸˜
               Consideracoes Finais   Na verdade..


Download




                        ¸˜     ´
          Esta apresentacao esta dispon´vel em:
                                       ı
       https://github.com/viniciusmassuchetto/
          wordpress-presentation-migrations




               Vinicius Massuchetto                ¸˜
                                      Grandes Migracoes
¸˜
                            Introducao          ¸˜
                                         Introducao
                              Sistemas          ¸˜
                                         Motivacao Para o Cliente
                                   ¸˜
                            Migracoes           ¸˜
                                         Motivacao Para a Equipe de Desenvolvimento
                           ¸˜
                  Consideracoes Finais   Na verdade..


Sobre o Que Falaremos



     Por que tratar do assunto
          ¸˜
     Migracoes no WordPress
          ¸˜
     Migracoes em plaraformas suportadas
          ¸˜
     Migracoes de outras plataformas
           ´             ¸˜
     Estrategias de migracao




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
¸˜
                           Introducao          ¸˜
                                        Introducao
                             Sistemas          ¸˜
                                        Motivacao Para o Cliente
                                  ¸˜
                           Migracoes           ¸˜
                                        Motivacao Para a Equipe de Desenvolvimento
                          ¸˜
                 Consideracoes Finais   Na verdade..


                         ¸˜
Por que falar sobre migracoes com o Cliente?




           ¸˜          ´
     Indexacao de conteudo
            ¸˜
     Manutencao de usabilidade
                ¸˜          ´
     Reestruturacao do conteudo




                 Vinicius Massuchetto                ¸˜
                                        Grandes Migracoes
¸˜
                            Introducao          ¸˜
                                         Introducao
                              Sistemas          ¸˜
                                         Motivacao Para o Cliente
                                   ¸˜
                            Migracoes           ¸˜
                                         Motivacao Para a Equipe de Desenvolvimento
                           ¸˜
                  Consideracoes Finais   Na verdade..


                         ¸˜
Por que falar sobre migracoes com a equipe de
desenvolvimento?


       ´
     Analise de complexidade
       ´               ¸˜        ¸˜
     Analise de correlacao e criacao de estruturas
           ¸˜
     Resolucao de velhos problemas
          ¸˜           ´
     Definicao de estrategias
           ¸˜
     Delegacao de tarefas
            ¸˜
     Elaboracao de manuais
          ¸˜
     Definicao do tempo de projeto



                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
¸˜
                            Introducao          ¸˜
                                         Introducao
                              Sistemas          ¸˜
                                         Motivacao Para o Cliente
                                   ¸˜
                            Migracoes           ¸˜
                                         Motivacao Para a Equipe de Desenvolvimento
                           ¸˜
                  Consideracoes Finais   Na verdade..


                      ¸˜    ˜
E na verdade, as migracoes sao..




     Uma etapa de projeto que poderia ser melhor discutida
                                                ¸˜
     Uma das partes mais importantes da implantacao de
     projetos web




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
¸˜
                          Introducao
                            Sistemas    WordPress → WordPress
                                 ¸˜
                          Migracoes     Sistemas Suportados
                         ¸˜
                Consideracoes Finais


       ˜       ¸˜
O que sao migracoes para o WordPress?




     WordPress → WordPress
     Plataformas Suportadas → WordPress
     Outras Plataformas → WordPress




                 Vinicius Massuchetto                ¸˜
                                        Grandes Migracoes
¸˜
                          Introducao
                            Sistemas    WordPress → WordPress
                                 ¸˜
                          Migracoes     Sistemas Suportados
                         ¸˜
                Consideracoes Finais


WordPress → WordPress



    Geralmente tranquila quando feita corretamente
                                          ¸˜
    Requere menos processamento e recuperacao de
         ´
    conteudos externos
    Casos:
                      ˜
        Quando a URL nao muda
        Quando a URL muda




                 Vinicius Massuchetto                ¸˜
                                        Grandes Migracoes
¸˜
                          Introducao
                            Sistemas   WordPress → WordPress
                                 ¸˜
                          Migracoes    Sistemas Suportados
                         ¸˜
                Consideracoes Finais


WordPress → WordPress: Mesma URL




    Copiar a base
    Modificar o wp-config.php




                Vinicius Massuchetto                ¸˜
                                       Grandes Migracoes
¸˜
                              Introducao
                                Sistemas   WordPress → WordPress
                                     ¸˜
                              Migracoes    Sistemas Suportados
                             ¸˜
                    Consideracoes Finais


WordPress → WordPress: Mesma URL




  mysqldump -u user -ppass db | bzip2 > dump.sql.bz2
  scp dump.sql.bz2 user@host:˜/
  ssh user@host "bunzip2 dump.sql.bz2"
  ssh user@host "mysql -u user -ppass db < dump.sql"




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                            Introducao
                              Sistemas   WordPress → WordPress
                                   ¸˜
                            Migracoes    Sistemas Suportados
                           ¸˜
                  Consideracoes Finais


WordPress → WordPress: URLs Diferentes




     No WordPress, muitas URLs ficam persistentes no banco
     de dados
                          ˜
     Buscar e substituir nao resolve




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
¸˜
                              Introducao
                                Sistemas   WordPress → WordPress
                                     ¸˜
                              Migracoes    Sistemas Suportados
                             ¸˜
                    Consideracoes Finais


WordPress → WordPress: URLs Diferentes


  $meta_value = array (
      "key1" => "test1",
      "key2" => "test2",
      "url" => "http://example.com"
  );
  add_post_meta($post_id, "meta_key", $meta_value);

  a:3:{
      s:4:"key1";s:5:"test1";
      s:4:"key2";s:5:"test2";
      s:3:"url";s:18:"http://example.com";
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                              Introducao
                                Sistemas   WordPress → WordPress
                                     ¸˜
                              Migracoes    Sistemas Suportados
                             ¸˜
                    Consideracoes Finais


WordPress → WordPress: URLs Diferentes


  a:3:{
      s:4:"key1";s:5:"test1";
      s:4:"key2";s:5:"test2";
      s:3:"url";s:18:"http://example2.com";
  }

  $meta_value = get_post_meta($post_id, "meta_key");

  array(1) {
      [0]=>
      bool(false)
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                            Introducao
                              Sistemas   WordPress → WordPress
                                   ¸˜
                            Migracoes    Sistemas Suportados
                           ¸˜
                  Consideracoes Finais


WordPress → WordPress: URLs Diferentes



                                                   ¸˜
     Para mudanca de URLs deve-se fazer a substituicao
               ¸
     adequadamente, via plugin ou script
     Exemplos:
         Script: Search and Replace Tool
         Plugin: WordPress Move
         Plugin: Search and Replace
         Plugin: WP Migrate Tool




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
¸˜
                              Introducao
                                Sistemas   WordPress → WordPress
                                     ¸˜
                              Migracoes    Sistemas Suportados
                             ¸˜
                    Consideracoes Finais


WordPress → WordPress: URLs Diferentes




  mysqldump -u user -ppass db | bzip2 > dump.sql.bz2
  scp dump.sql.bz2 user@host:˜/
  ssh user@host "bunzip2 dump.sql.bz2"
  ssh user@host "mysql -u user -ppass db < dump.sql"

  e..




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                              Introducao
                                Sistemas   WordPress → WordPress
                                     ¸˜
                              Migracoes    Sistemas Suportados
                             ¸˜
                    Consideracoes Finais


WordPress → WordPress: URLs Diferentes


  TABLES=""
  for T in ‘mysql -u user -ppass db -N -s -e "SHOW TABLES"‘; do
       TABLES="tables[]=${TABLES}&"
  done

  SEARCH="http://example.com"
  REPLACE="http://otherexample.com"

  ACCESS="user=${USER}&pass=${PASS}&host=${HOST}&data=${DB}"
  DATA="${TABLES}&${ACCESS}&srch=${SEARCH}&rplc=${REPLACE}"

  curl -d "$DATA" http://host/searchreplacedb2.php?step5




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                              Introducao
                                Sistemas   WordPress → WordPress
                                     ¸˜
                              Migracoes    Sistemas Suportados
                             ¸˜
                    Consideracoes Finais


WordPress → WordPress: URLs Diferentes



  a:3:{
    s:4:"key1";s:5:"test1";
    s:4:"key2";s:5:"test2";
    s:3:"url";s:23:"http://otherexample.com";
  }

  $meta_value = get_post_meta($post_id, "meta_key");




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                              Introducao
                                Sistemas   WordPress → WordPress
                                     ¸˜
                              Migracoes    Sistemas Suportados
                             ¸˜
                    Consideracoes Finais


WordPress → WordPress: URLs Diferentes


  array(1) {
    [0]=>
    array(3) {
      ["key1"]=>
      string(5) "test1"
      ["key2"]=>
      string(5) "test2"
      ["url"]=>
      string(23) "http://otherexample.com"
    }
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                            Introducao
                              Sistemas    WordPress → WordPress
                                   ¸˜
                            Migracoes     Sistemas Suportados
                           ¸˜
                  Consideracoes Finais


WordPress → Suportados



    Blogger
    LiveJournal
    Movable Type
    RSS
    Tumblr




                   Vinicius Massuchetto                ¸˜
                                          Grandes Migracoes
¸˜
                          Introducao
                            Sistemas    WordPress → WordPress
                                 ¸˜
                          Migracoes     Sistemas Suportados
                         ¸˜
                Consideracoes Finais


WordPress → Suportados




                             ´                        ¸˜
    Procedimento direto atraves de arquivos de exportacao
                                             ´
    Para mudanca de URLs deve-se recorrer a metodos
                 ¸
    similares as migracoes WordPress → WordPress.
              `       ¸˜




                 Vinicius Massuchetto                ¸˜
                                        Grandes Migracoes
Tecnologia
                                    ¸˜
                            Introducao
                                         Estrutura
                              Sistemas
                                               ´
                                         Conteudo
                                   ¸˜
                            Migracoes
                                         M´dias
                                           ı
                           ¸˜
                  Consideracoes Finais
                                         URLs


 ´
Topicos a Serem Levados em Conta



     Tecnologia
     Estrutura
          ˆ            ¸˜
     Referencias e relacoes internas
          ´
     Conteudo
     M´dias
      ı
     URLs




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                   ¸˜
                           Introducao
                                         Estrutura
                             Sistemas
                                               ´
                                         Conteudo
                                  ¸˜
                           Migracoes
                                         M´dias
                                           ı
                          ¸˜
                 Consideracoes Finais
                                         URLs


Tecnologias Empregadas


              ¸˜
     Configuracao dos servidores
                    ˆ                 ¸˜
     (safe mode, parametros de compilacao)
         ini set("memory limit", -1)
         set time limit(0)
         ou.. ajax recursivo
     Sistema de banco de dados da estrutura a ser migrada
                  ¸˜
     Modo de obtencao de dados (socket, webservice, csv)
                                                   ¸˜
     Linguagem a serem escritos os scripts de migracao
           ˆ
     Preferencia: PHP, MySQL, de dentro do WordPress



                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                    ¸˜
                            Introducao
                                         Estrutura
                              Sistemas
                                               ´
                                         Conteudo
                                   ¸˜
                            Migracoes
                                         M´dias
                                           ı
                           ¸˜
                  Consideracoes Finais
                                         URLs


Tecnologias Empregadas




                 ´       ´
     Migrar atraves do proprio WordPress:
                               ¸˜             ¸˜
         Facilidade e padronizacao de manipulacao dos dados
         Garantia de integridade




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                     ¸˜
                             Introducao
                                          Estrutura
                               Sistemas
                                                ´
                                          Conteudo
                                    ¸˜
                             Migracoes
                                          M´dias
                                            ı
                            ¸˜
                   Consideracoes Finais
                                          URLs


Tecnologias Empregadas: wpdb




     Classe wpdb
         query()
         get results()
         get var()




                   Vinicius Massuchetto                ¸˜
                                          Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


Tecnologias Empregadas: wpdb



  global $db;
  $db = new wpdb(
      IMPORT_USER,
      IMPORT_PASS,
      IMPORT_DB,
      IMPORT_SERVER);




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                   ¸˜
                           Introducao
                                        Estrutura
                             Sistemas
                                              ´
                                        Conteudo
                                  ¸˜
                           Migracoes
                                        M´dias
                                          ı
                          ¸˜
                 Consideracoes Finais
                                        URLs


Tecnologias Empregadas: Tratamento



        ¸˜
     Funcoes de tratamento:
         remove accents()
         sanitize title()
         normalize whitespace()
         make clickable()
         capital P dangit()




                 Vinicius Massuchetto                ¸˜
                                        Grandes Migracoes
Tecnologia
                                   ¸˜
                           Introducao
                                        Estrutura
                             Sistemas
                                              ´
                                        Conteudo
                                  ¸˜
                           Migracoes
                                        M´dias
                                          ı
                          ¸˜
                 Consideracoes Finais
                                        URLs


                              ¸˜
Tecnologias Empregadas: Abstracao de Banco



        ¸˜          ¸˜
     Funcoes de relacao com o banco de dados:
         wp insert post()
         wp insert term()
         wp set post terms()
         wp insert attachment()
         wp update attachment metadata()
         update post meta()




                 Vinicius Massuchetto                ¸˜
                                        Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


Tecnologias Empregadas: Exemplo de Rotina


  $bd = new wpdb(..);
  $sql = "
      SELECT ...
      FROM ...
  ";
  foreach ($bd->get_results($sql) as $p) {

      /* formatacao de $post_attrs com base em $p */

      wp_insert_post($post_attrs);

  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


Tecnologias Empregadas: Exemplo de Rotina

  add_action(’wp’, ’import’);
  function import() {
      import_post_id($_REQUEST[’post_id’]);
      $post_id = $db->get_var($sql);
      ?>
      <script type="text/javascript">
          jQuery.ajax({ /* .. */
              data: {
                  ’ajax’: 1,
                  ’post_id’: <?php echo $post_id; ?>
              }
          });
      </script>
      <?php
  }


                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                              ¸˜
                      Introducao
                                   Estrutura
                        Sistemas
                                         ´
                                   Conteudo
                             ¸˜
                      Migracoes
                                   M´dias
                                     ı
                     ¸˜
            Consideracoes Finais
                                   URLs


Estrutura




            Vinicius Massuchetto                ¸˜
                                   Grandes Migracoes
Tecnologia
                                    ¸˜
                            Introducao
                                         Estrutura
                              Sistemas
                                               ´
                                         Conteudo
                                   ¸˜
                            Migracoes
                                         M´dias
                                           ı
                           ¸˜
                  Consideracoes Finais
                                         URLs


Estrutura: Mapeamento




              ¸˜
     Identificacao das entidades (post types)
              ¸˜
     Identificacao dos atributos (custom fields)
              ¸˜          ¸˜                      ¸˜
     Identificacao das relacoes (taxonomias ou relacoes de
     plugins)




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


Estrutura: Mapeamento

  Exemplo: Linha de tabela estabelecimento
      (int) id
      (str) nome
      (str) descricao
      (str) rua
      (str) bairro
      (fk) cidade
      (fk) estado
      (fk) tipo
      (fk) foto

                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                     ¸˜
                             Introducao
                                          Estrutura
                               Sistemas
                                                ´
                                          Conteudo
                                    ¸˜
                             Migracoes
                                          M´dias
                                            ı
                            ¸˜
                   Consideracoes Finais
                                          URLs


Estrutura: Mapeamento

     Post type estabelecimento
         post title: nome
         post content: descricao
     Chaves meta
         meta key:     rua
         meta key:     bairro
         meta key:      id
     Taxonomia
         Tipo de Estabelecimento
     Anexo
         Foto


                   Vinicius Massuchetto                ¸˜
                                          Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


Estrutura: Mapeamento


      cidade (??)
      estado (??)
      ¸˜
  Solucoes poss´veis:
               ı
      Taxonomia
      post parent
          ¸˜
      Relacao via custom fields
          ¸˜
      Relacao via plugin
      (Advanced Custom Fields, Post Relationships)



                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                    ¸˜
                            Introducao
                                         Estrutura
                              Sistemas
                                               ´
                                         Conteudo
                                   ¸˜
                            Migracoes
                                         M´dias
                                           ı
                           ¸˜
                  Consideracoes Finais
                                         URLs


    ¸˜
Relacoes Internas



         ¸˜
     Solucao depende do escopo de projeto
                       ˆ
     Algumas transferencias devem ser em camadas
          ¸˜
     (relacoes recursivas)
     Exemplos:
         Taxonomia “Tipo de Estabelecimento”
                         ´
         Itens “Leia tambem” de um post




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


    ¸˜                  ¸˜
Relacoes Internas: Insercao sob Demanda


  require_once(ABSPATH . ’wp-admin/includes/taxonomy.php’);

  function get_or_create_category($cat_name) {

      if ($cat_id = get_cat_ID($cat_name))
          return $cat_id;

      $cat_id = wp_create_category($cat_name);
      return $cat_id;
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


    ¸˜                                     ¸˜
Relacoes Internas: Primeira camada de migracao


  foreach ($posts as $p) {
      /* Post ja importado */
      if ($id = get_new_id($p->id))
          continue;

      /* Insere post sem nenhum conteudo */
      $post_attrs = get_new_post_attrs($p);
      $post_id = wp_insert_post($post_attrs);
      update_post_meta($post_id, ’_old_id’, $p->id);
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                   ¸˜
                           Introducao
                                         Estrutura
                             Sistemas
                                               ´
                                         Conteudo
                                  ¸˜
                           Migracoes
                                         M´dias
                                           ı
                          ¸˜
                 Consideracoes Finais
                                         URLs


       ¸˜                      ´
Formatacao: Basicamente o conteudo



            ¸˜           ´            ´
     Elaboracao de inventario de conteudo
            ˜
     Conversao de caminhos
            ˜
     Conversao de embeds em shortcodes
            ˜                         ´
     Conversao de estruturas HTML editaveis
         ¸˜
     Remocao de scripts




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


       ¸˜
Formatacao: Capturando Links

  preg_match_all(’/< *a [ˆ>]*href *= *["’]?([ˆ"’]*)/i’,
      $content, $links);
  foreach ($links[1] as $link) {
      $page_content = file_get_contents($link);
      $page_title = preg_match(’/<title>(.*?)</title>/’,
          $page_content, $title);

      /* ... verificacoes ... */

      $linkdata = array(
        ’link_name’ => $title[1],
        ’link_url’ => $link
      );
      wp_insert_link($linkdata);
  }


                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                    ¸˜
                            Introducao
                                         Estrutura
                              Sistemas
                                               ´
                                         Conteudo
                                   ¸˜
                            Migracoes
                                         M´dias
                                           ı
                           ¸˜
                  Consideracoes Finais
                                         URLs


     ¸˜
Migracao de M´dias
             ı




      ˜                                               ´
     Nao se contentar com as m´dias inseridas no conteudo
                              ı
         Sem rastreabilidade pelo software
                  `             ´
         Sujeitas a estrutura propria de armazenamento
                ´
     Montar tambem a biblioteca de m´dias e galerias do
                                    ı
          ´
     conteudo




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


     ¸˜
Migracao de M´dias
             ı



  preg_match_all(’/<img[ˆ>]*src *= *["’]?([ˆ"’]*)/i’,
      $post_content, $media);
  foreach ($media[1] as $img_url) {

      /* (2) */

  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


     ¸˜
Migracao de M´dias
             ı


  if (!$filename = valid_file($img_url))
      continue;

  $upload = wp_upload_dir(/* ’yyyy/mm’ */);
  download($m, $path = $upload[’path’] . ’/’ . $filename);
  $wp_filetype = wp_check_filetype($file);
  $attachment = array(
      ’guid’           => $img_url,
      ’post_mime_type’ => $wp_filetype[’type’],
      ’post_title’     => $filename,
      ’post_status’    => ’inherit’,
  );




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


     ¸˜
Migracao de M´dias
             ı




  $attach_id = wp_insert_attachment($attachment, $path, $post_id);
  $attach_data = wp_generate_attachment_metadata($attach_id,
      $path);
  wp_update_attachment_metadata($attach_id, $attach_data);




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                   ¸˜
                           Introducao
                                         Estrutura
                             Sistemas
                                               ´
                                         Conteudo
                                  ¸˜
                           Migracoes
                                         M´dias
                                           ı
                          ¸˜
                 Consideracoes Finais
                                         URLs


     ¸˜                        ˆ
Migracao de M´dias: Servico Dinamico
             ı           ¸




           ´                                         ˆ
     Ao inves do download pode-se fazer o servico dinamico de
                                               ¸
     m´dias. Veja o arquivo
       ı
     wp-includes/ms-files.php




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


     ¸˜                        ˆ
Migracao de M´dias: Servico Dinamico
             ı           ¸



  http://exemplo.com/imagens/foto.jpg

  RewriteRule $ˆ$(.*/)?imagens/(.*)
      wp-includes/ms-files.php?file=$2 [L]

  http://exemplo.com/wp-includes/ms-files.php?file=foto.jpg




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


     ¸˜                        ˆ
Migracao de M´dias: Servico Dinamico
             ı           ¸



  $file = $_GET[’file’]

  header( ’Content-Type: ’ . $mimetype );
  header( ’Content-Length: ’ . filesize( $file ) );
  header( ’X-Accel-Redirect: ’ . str_replace( WP_CONTENT_DIR, ’’,
      $file ) );
  header( ’X-Sendfile: ’ . $file );
  readfile( $file );




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                            Estrutura
                                Sistemas
                                                  ´
                                            Conteudo
                                     ¸˜
                              Migracoes
                                            M´dias
                                              ı
                             ¸˜
                    Consideracoes Finais
                                            URLs


URLs



                      ´                                  ˆ
       Para cada conteudo migrado, sempre guardar a referencia
                   ´
       para o conteudo antigo
       Na nova estrutura, verificar os meios de acesso no
            ´
       conteudo e redirecionar para o novo.
       Casos:
                            ˆ
           A partir de referencias $ REQUEST
           A partir de regras de URL




                     Vinicius Massuchetto                ¸˜
                                            Grandes Migracoes
Tecnologia
                                        ¸˜
                                Introducao
                                             Estrutura
                                  Sistemas
                                                   ´
                                             Conteudo
                                       ¸˜
                                Migracoes
                                             M´dias
                                               ı
                               ¸˜
                      Consideracoes Finais
                                             URLs


           ˆ
URLs: Referencias $ REQUEST

  add_action(’wp’, ’check_migrated’);
  function check_migrated() {

      if (!isset($_REQUEST[’old_website_id’]))
          return false;

      if ($new_post =
      get_post_from_old_id($_REQUEST[’old_website_id’]))
          wp_redirect(get_permalink($new_post->ID));

      return false;

  }



                      Vinicius Massuchetto                ¸˜
                                             Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


           ˆ
URLs: Referencias a partir de regras


  /* URL a ser migrada */

  http://example.com/old_id/123

  /* Escolher uma variavel para identificar este padrao */

  add_action(’query_vars’, ’add_query_vars’);
  function add_query_vars($vars) {
      array_push($vars, ’old_id’);
      return $vars;
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


           ˆ
URLs: Referencias a partir de regras



  /* Adiciona a regra no set de regras */

  add_action(’rewrite_rules_array’, ’rewrite_rules’);
  function rewrite_rules($rules) {
      $new_rules = array(
          ’old_id/(.+?)/?$’
      );
      return $rules + $new_rules;
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
Tecnologia
                                      ¸˜
                              Introducao
                                           Estrutura
                                Sistemas
                                                 ´
                                           Conteudo
                                     ¸˜
                              Migracoes
                                           M´dias
                                             ı
                             ¸˜
                    Consideracoes Finais
                                           URLs


           ˆ
URLs: Referencias a partir de regras



  /* Configura o flush de URLs */

  add_action(’wp_loaded’, ’flush_rules’);
  function flush_rules() {
      if (!isset($rules[’old_id/(.+?)/?$’])) {
          global $wp_rewrite;
          $wp_rewrite->flush_rules();
      }
  }




                    Vinicius Massuchetto                ¸˜
                                           Grandes Migracoes
¸˜
                           Introducao
                             Sistemas
                                  ¸˜
                           Migracoes
                          ¸˜
                 Consideracoes Finais


         ¸˜
Consideracoes Finais



          ¸˜
     Migracoes devem definitivamente ser inclu´das como
                                             ı
     componentes de projeto
     O WordPress oferece um bom conjunto de ferramentas
     para se trazer dadaos para dentro de sua estrutura.
     ´
     E cab´vel o desenvolvimento de plugins espec´ficos para a
           ı                                      ı
           ¸˜
     migracao de diferentes estruturas




                  Vinicius Massuchetto                ¸˜
                                         Grandes Migracoes
¸˜
                            Introducao
                              Sistemas
                                   ¸˜
                            Migracoes
                           ¸˜
                  Consideracoes Finais


     ˆ
Referencias




     Codex: Moving WordPress
     http://codex.wordpress.org/Moving_WordPress
     GitHub / interconnectit / Search-Replace-DB
     https://github.com/interconnectit/Search-Replace-DB




                   Vinicius Massuchetto                ¸˜
                                          Grandes Migracoes

Más contenido relacionado

Más de Vinicius Massuchetto

Trabalho colaborativo na sociedade da informação: representações da teoria ma...
Trabalho colaborativo na sociedade da informação: representações da teoria ma...Trabalho colaborativo na sociedade da informação: representações da teoria ma...
Trabalho colaborativo na sociedade da informação: representações da teoria ma...Vinicius Massuchetto
 
Desenvolvimento em comunidade: A história técnica e política de um plugin do ...
Desenvolvimento em comunidade: A história técnica e política de um plugin do ...Desenvolvimento em comunidade: A história técnica e política de um plugin do ...
Desenvolvimento em comunidade: A história técnica e política de um plugin do ...Vinicius Massuchetto
 
Representações da Teoria Marxista no Software Livre
Representações da Teoria Marxista no Software LivreRepresentações da Teoria Marxista no Software Livre
Representações da Teoria Marxista no Software LivreVinicius Massuchetto
 
Plugins no WordPress: Fazendo o Negócio Direito
Plugins no WordPress: Fazendo o Negócio DireitoPlugins no WordPress: Fazendo o Negócio Direito
Plugins no WordPress: Fazendo o Negócio DireitoVinicius Massuchetto
 
Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...
Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...
Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...Vinicius Massuchetto
 
Os Catadores de Materiais Recicláveis e a Administração Pública de Curitiba
Os Catadores de Materiais Recicláveis e a Administração Pública de CuritibaOs Catadores de Materiais Recicláveis e a Administração Pública de Curitiba
Os Catadores de Materiais Recicláveis e a Administração Pública de CuritibaVinicius Massuchetto
 

Más de Vinicius Massuchetto (6)

Trabalho colaborativo na sociedade da informação: representações da teoria ma...
Trabalho colaborativo na sociedade da informação: representações da teoria ma...Trabalho colaborativo na sociedade da informação: representações da teoria ma...
Trabalho colaborativo na sociedade da informação: representações da teoria ma...
 
Desenvolvimento em comunidade: A história técnica e política de um plugin do ...
Desenvolvimento em comunidade: A história técnica e política de um plugin do ...Desenvolvimento em comunidade: A história técnica e política de um plugin do ...
Desenvolvimento em comunidade: A história técnica e política de um plugin do ...
 
Representações da Teoria Marxista no Software Livre
Representações da Teoria Marxista no Software LivreRepresentações da Teoria Marxista no Software Livre
Representações da Teoria Marxista no Software Livre
 
Plugins no WordPress: Fazendo o Negócio Direito
Plugins no WordPress: Fazendo o Negócio DireitoPlugins no WordPress: Fazendo o Negócio Direito
Plugins no WordPress: Fazendo o Negócio Direito
 
Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...
Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...
Apresentação de TCC: Os Catadores de Materiais Recicláveis e a Administração ...
 
Os Catadores de Materiais Recicláveis e a Administração Pública de Curitiba
Os Catadores de Materiais Recicláveis e a Administração Pública de CuritibaOs Catadores de Materiais Recicláveis e a Administração Pública de Curitiba
Os Catadores de Materiais Recicláveis e a Administração Pública de Curitiba
 

Último

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Último (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Grandes Migrações: Passando de Qualquer Plataforma Para o WordPress

  • 1. ¸˜ Introducao Sistemas ¸˜ Migracoes ¸˜ Consideracoes Finais ¸˜ Grandes Migracoes Passando de Qualquer Plataforma Para o WordPress Vinicius Massuchetto WordCamp Curitiba 2012 Junho de 2012 Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 2. ¸˜ Introducao ¸˜ Introducao Sistemas ¸˜ Motivacao Para o Cliente ¸˜ Migracoes ¸˜ Motivacao Para a Equipe de Desenvolvimento ¸˜ Consideracoes Finais Na verdade.. Download ¸˜ ´ Esta apresentacao esta dispon´vel em: ı https://github.com/viniciusmassuchetto/ wordpress-presentation-migrations Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 3. ¸˜ Introducao ¸˜ Introducao Sistemas ¸˜ Motivacao Para o Cliente ¸˜ Migracoes ¸˜ Motivacao Para a Equipe de Desenvolvimento ¸˜ Consideracoes Finais Na verdade.. Sobre o Que Falaremos Por que tratar do assunto ¸˜ Migracoes no WordPress ¸˜ Migracoes em plaraformas suportadas ¸˜ Migracoes de outras plataformas ´ ¸˜ Estrategias de migracao Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 4. ¸˜ Introducao ¸˜ Introducao Sistemas ¸˜ Motivacao Para o Cliente ¸˜ Migracoes ¸˜ Motivacao Para a Equipe de Desenvolvimento ¸˜ Consideracoes Finais Na verdade.. ¸˜ Por que falar sobre migracoes com o Cliente? ¸˜ ´ Indexacao de conteudo ¸˜ Manutencao de usabilidade ¸˜ ´ Reestruturacao do conteudo Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 5. ¸˜ Introducao ¸˜ Introducao Sistemas ¸˜ Motivacao Para o Cliente ¸˜ Migracoes ¸˜ Motivacao Para a Equipe de Desenvolvimento ¸˜ Consideracoes Finais Na verdade.. ¸˜ Por que falar sobre migracoes com a equipe de desenvolvimento? ´ Analise de complexidade ´ ¸˜ ¸˜ Analise de correlacao e criacao de estruturas ¸˜ Resolucao de velhos problemas ¸˜ ´ Definicao de estrategias ¸˜ Delegacao de tarefas ¸˜ Elaboracao de manuais ¸˜ Definicao do tempo de projeto Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 6. ¸˜ Introducao ¸˜ Introducao Sistemas ¸˜ Motivacao Para o Cliente ¸˜ Migracoes ¸˜ Motivacao Para a Equipe de Desenvolvimento ¸˜ Consideracoes Finais Na verdade.. ¸˜ ˜ E na verdade, as migracoes sao.. Uma etapa de projeto que poderia ser melhor discutida ¸˜ Uma das partes mais importantes da implantacao de projetos web Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 7. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais ˜ ¸˜ O que sao migracoes para o WordPress? WordPress → WordPress Plataformas Suportadas → WordPress Outras Plataformas → WordPress Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 8. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress Geralmente tranquila quando feita corretamente ¸˜ Requere menos processamento e recuperacao de ´ conteudos externos Casos: ˜ Quando a URL nao muda Quando a URL muda Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 9. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: Mesma URL Copiar a base Modificar o wp-config.php Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 10. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: Mesma URL mysqldump -u user -ppass db | bzip2 > dump.sql.bz2 scp dump.sql.bz2 user@host:˜/ ssh user@host "bunzip2 dump.sql.bz2" ssh user@host "mysql -u user -ppass db < dump.sql" Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 11. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes No WordPress, muitas URLs ficam persistentes no banco de dados ˜ Buscar e substituir nao resolve Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 12. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes $meta_value = array ( "key1" => "test1", "key2" => "test2", "url" => "http://example.com" ); add_post_meta($post_id, "meta_key", $meta_value); a:3:{ s:4:"key1";s:5:"test1"; s:4:"key2";s:5:"test2"; s:3:"url";s:18:"http://example.com"; } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 13. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes a:3:{ s:4:"key1";s:5:"test1"; s:4:"key2";s:5:"test2"; s:3:"url";s:18:"http://example2.com"; } $meta_value = get_post_meta($post_id, "meta_key"); array(1) { [0]=> bool(false) } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 14. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes ¸˜ Para mudanca de URLs deve-se fazer a substituicao ¸ adequadamente, via plugin ou script Exemplos: Script: Search and Replace Tool Plugin: WordPress Move Plugin: Search and Replace Plugin: WP Migrate Tool Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 15. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes mysqldump -u user -ppass db | bzip2 > dump.sql.bz2 scp dump.sql.bz2 user@host:˜/ ssh user@host "bunzip2 dump.sql.bz2" ssh user@host "mysql -u user -ppass db < dump.sql" e.. Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 16. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes TABLES="" for T in ‘mysql -u user -ppass db -N -s -e "SHOW TABLES"‘; do TABLES="tables[]=${TABLES}&" done SEARCH="http://example.com" REPLACE="http://otherexample.com" ACCESS="user=${USER}&pass=${PASS}&host=${HOST}&data=${DB}" DATA="${TABLES}&${ACCESS}&srch=${SEARCH}&rplc=${REPLACE}" curl -d "$DATA" http://host/searchreplacedb2.php?step5 Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 17. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes a:3:{ s:4:"key1";s:5:"test1"; s:4:"key2";s:5:"test2"; s:3:"url";s:23:"http://otherexample.com"; } $meta_value = get_post_meta($post_id, "meta_key"); Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 18. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → WordPress: URLs Diferentes array(1) { [0]=> array(3) { ["key1"]=> string(5) "test1" ["key2"]=> string(5) "test2" ["url"]=> string(23) "http://otherexample.com" } } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 19. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → Suportados Blogger LiveJournal Movable Type RSS Tumblr Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 20. ¸˜ Introducao Sistemas WordPress → WordPress ¸˜ Migracoes Sistemas Suportados ¸˜ Consideracoes Finais WordPress → Suportados ´ ¸˜ Procedimento direto atraves de arquivos de exportacao ´ Para mudanca de URLs deve-se recorrer a metodos ¸ similares as migracoes WordPress → WordPress. ` ¸˜ Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 21. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ´ Topicos a Serem Levados em Conta Tecnologia Estrutura ˆ ¸˜ Referencias e relacoes internas ´ Conteudo M´dias ı URLs Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 22. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Tecnologias Empregadas ¸˜ Configuracao dos servidores ˆ ¸˜ (safe mode, parametros de compilacao) ini set("memory limit", -1) set time limit(0) ou.. ajax recursivo Sistema de banco de dados da estrutura a ser migrada ¸˜ Modo de obtencao de dados (socket, webservice, csv) ¸˜ Linguagem a serem escritos os scripts de migracao ˆ Preferencia: PHP, MySQL, de dentro do WordPress Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 23. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Tecnologias Empregadas ´ ´ Migrar atraves do proprio WordPress: ¸˜ ¸˜ Facilidade e padronizacao de manipulacao dos dados Garantia de integridade Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 24. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Tecnologias Empregadas: wpdb Classe wpdb query() get results() get var() Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 25. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Tecnologias Empregadas: wpdb global $db; $db = new wpdb( IMPORT_USER, IMPORT_PASS, IMPORT_DB, IMPORT_SERVER); Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 26. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Tecnologias Empregadas: Tratamento ¸˜ Funcoes de tratamento: remove accents() sanitize title() normalize whitespace() make clickable() capital P dangit() Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 27. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ Tecnologias Empregadas: Abstracao de Banco ¸˜ ¸˜ Funcoes de relacao com o banco de dados: wp insert post() wp insert term() wp set post terms() wp insert attachment() wp update attachment metadata() update post meta() Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 28. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Tecnologias Empregadas: Exemplo de Rotina $bd = new wpdb(..); $sql = " SELECT ... FROM ... "; foreach ($bd->get_results($sql) as $p) { /* formatacao de $post_attrs com base em $p */ wp_insert_post($post_attrs); } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 29. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Tecnologias Empregadas: Exemplo de Rotina add_action(’wp’, ’import’); function import() { import_post_id($_REQUEST[’post_id’]); $post_id = $db->get_var($sql); ?> <script type="text/javascript"> jQuery.ajax({ /* .. */ data: { ’ajax’: 1, ’post_id’: <?php echo $post_id; ?> } }); </script> <?php } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 30. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Estrutura Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 31. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Estrutura: Mapeamento ¸˜ Identificacao das entidades (post types) ¸˜ Identificacao dos atributos (custom fields) ¸˜ ¸˜ ¸˜ Identificacao das relacoes (taxonomias ou relacoes de plugins) Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 32. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Estrutura: Mapeamento Exemplo: Linha de tabela estabelecimento (int) id (str) nome (str) descricao (str) rua (str) bairro (fk) cidade (fk) estado (fk) tipo (fk) foto Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 33. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Estrutura: Mapeamento Post type estabelecimento post title: nome post content: descricao Chaves meta meta key: rua meta key: bairro meta key: id Taxonomia Tipo de Estabelecimento Anexo Foto Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 34. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs Estrutura: Mapeamento cidade (??) estado (??) ¸˜ Solucoes poss´veis: ı Taxonomia post parent ¸˜ Relacao via custom fields ¸˜ Relacao via plugin (Advanced Custom Fields, Post Relationships) Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 35. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ Relacoes Internas ¸˜ Solucao depende do escopo de projeto ˆ Algumas transferencias devem ser em camadas ¸˜ (relacoes recursivas) Exemplos: Taxonomia “Tipo de Estabelecimento” ´ Itens “Leia tambem” de um post Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 36. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ ¸˜ Relacoes Internas: Insercao sob Demanda require_once(ABSPATH . ’wp-admin/includes/taxonomy.php’); function get_or_create_category($cat_name) { if ($cat_id = get_cat_ID($cat_name)) return $cat_id; $cat_id = wp_create_category($cat_name); return $cat_id; } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 37. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ ¸˜ Relacoes Internas: Primeira camada de migracao foreach ($posts as $p) { /* Post ja importado */ if ($id = get_new_id($p->id)) continue; /* Insere post sem nenhum conteudo */ $post_attrs = get_new_post_attrs($p); $post_id = wp_insert_post($post_attrs); update_post_meta($post_id, ’_old_id’, $p->id); } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 38. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ ´ Formatacao: Basicamente o conteudo ¸˜ ´ ´ Elaboracao de inventario de conteudo ˜ Conversao de caminhos ˜ Conversao de embeds em shortcodes ˜ ´ Conversao de estruturas HTML editaveis ¸˜ Remocao de scripts Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 39. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ Formatacao: Capturando Links preg_match_all(’/< *a [ˆ>]*href *= *["’]?([ˆ"’]*)/i’, $content, $links); foreach ($links[1] as $link) { $page_content = file_get_contents($link); $page_title = preg_match(’/<title>(.*?)</title>/’, $page_content, $title); /* ... verificacoes ... */ $linkdata = array( ’link_name’ => $title[1], ’link_url’ => $link ); wp_insert_link($linkdata); } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 40. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ Migracao de M´dias ı ˜ ´ Nao se contentar com as m´dias inseridas no conteudo ı Sem rastreabilidade pelo software ` ´ Sujeitas a estrutura propria de armazenamento ´ Montar tambem a biblioteca de m´dias e galerias do ı ´ conteudo Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 41. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ Migracao de M´dias ı preg_match_all(’/<img[ˆ>]*src *= *["’]?([ˆ"’]*)/i’, $post_content, $media); foreach ($media[1] as $img_url) { /* (2) */ } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 42. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ Migracao de M´dias ı if (!$filename = valid_file($img_url)) continue; $upload = wp_upload_dir(/* ’yyyy/mm’ */); download($m, $path = $upload[’path’] . ’/’ . $filename); $wp_filetype = wp_check_filetype($file); $attachment = array( ’guid’ => $img_url, ’post_mime_type’ => $wp_filetype[’type’], ’post_title’ => $filename, ’post_status’ => ’inherit’, ); Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 43. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ Migracao de M´dias ı $attach_id = wp_insert_attachment($attachment, $path, $post_id); $attach_data = wp_generate_attachment_metadata($attach_id, $path); wp_update_attachment_metadata($attach_id, $attach_data); Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 44. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ ˆ Migracao de M´dias: Servico Dinamico ı ¸ ´ ˆ Ao inves do download pode-se fazer o servico dinamico de ¸ m´dias. Veja o arquivo ı wp-includes/ms-files.php Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 45. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ ˆ Migracao de M´dias: Servico Dinamico ı ¸ http://exemplo.com/imagens/foto.jpg RewriteRule $ˆ$(.*/)?imagens/(.*) wp-includes/ms-files.php?file=$2 [L] http://exemplo.com/wp-includes/ms-files.php?file=foto.jpg Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 46. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ¸˜ ˆ Migracao de M´dias: Servico Dinamico ı ¸ $file = $_GET[’file’] header( ’Content-Type: ’ . $mimetype ); header( ’Content-Length: ’ . filesize( $file ) ); header( ’X-Accel-Redirect: ’ . str_replace( WP_CONTENT_DIR, ’’, $file ) ); header( ’X-Sendfile: ’ . $file ); readfile( $file ); Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 47. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs URLs ´ ˆ Para cada conteudo migrado, sempre guardar a referencia ´ para o conteudo antigo Na nova estrutura, verificar os meios de acesso no ´ conteudo e redirecionar para o novo. Casos: ˆ A partir de referencias $ REQUEST A partir de regras de URL Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 48. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ˆ URLs: Referencias $ REQUEST add_action(’wp’, ’check_migrated’); function check_migrated() { if (!isset($_REQUEST[’old_website_id’])) return false; if ($new_post = get_post_from_old_id($_REQUEST[’old_website_id’])) wp_redirect(get_permalink($new_post->ID)); return false; } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 49. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ˆ URLs: Referencias a partir de regras /* URL a ser migrada */ http://example.com/old_id/123 /* Escolher uma variavel para identificar este padrao */ add_action(’query_vars’, ’add_query_vars’); function add_query_vars($vars) { array_push($vars, ’old_id’); return $vars; } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 50. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ˆ URLs: Referencias a partir de regras /* Adiciona a regra no set de regras */ add_action(’rewrite_rules_array’, ’rewrite_rules’); function rewrite_rules($rules) { $new_rules = array( ’old_id/(.+?)/?$’ ); return $rules + $new_rules; } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 51. Tecnologia ¸˜ Introducao Estrutura Sistemas ´ Conteudo ¸˜ Migracoes M´dias ı ¸˜ Consideracoes Finais URLs ˆ URLs: Referencias a partir de regras /* Configura o flush de URLs */ add_action(’wp_loaded’, ’flush_rules’); function flush_rules() { if (!isset($rules[’old_id/(.+?)/?$’])) { global $wp_rewrite; $wp_rewrite->flush_rules(); } } Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 52. ¸˜ Introducao Sistemas ¸˜ Migracoes ¸˜ Consideracoes Finais ¸˜ Consideracoes Finais ¸˜ Migracoes devem definitivamente ser inclu´das como ı componentes de projeto O WordPress oferece um bom conjunto de ferramentas para se trazer dadaos para dentro de sua estrutura. ´ E cab´vel o desenvolvimento de plugins espec´ficos para a ı ı ¸˜ migracao de diferentes estruturas Vinicius Massuchetto ¸˜ Grandes Migracoes
  • 53. ¸˜ Introducao Sistemas ¸˜ Migracoes ¸˜ Consideracoes Finais ˆ Referencias Codex: Moving WordPress http://codex.wordpress.org/Moving_WordPress GitHub / interconnectit / Search-Replace-DB https://github.com/interconnectit/Search-Replace-DB Vinicius Massuchetto ¸˜ Grandes Migracoes