SlideShare una empresa de Scribd logo
1 de 79
Descargar para leer sin conexión
¸˜
          Introducao
                 ˜
             Padroes
   Desenvolvimento
         ¸˜
Consideracoes Finais




Plugins no WordPress
             ´
Fazendo o Negocio Direito


     Vinicius Massuchetto

      Campus Party Brasil 2013


       Fevereiro de 2013




Vinicius Massuchetto   Plugins no WordPress
¸˜
                         Introducao              ¸˜
                                       Apresentacao
                                ˜
                            Padroes    Sobre a Palestra
                  Desenvolvimento             ¸˜
                                       Motivacao
                        ¸˜
               Consideracoes Finais    Avancando a Ideia
                                            ¸


         ¸˜
Apresentacao




                      @vmassuchetto
             http://github.com/vmassuchetto
           http://bitbucket.org/vmassuchetto
                         ¸˜
                Apresentacao dispon´vel em:
                                   ı
      http://vinicius.soylocoporti.org.br/?p=2191




                Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao             ¸˜
                                         Apresentacao
                                   ˜
                               Padroes   Sobre a Palestra
                     Desenvolvimento            ¸˜
                                         Motivacao
                           ¸˜
                  Consideracoes Finais   Avancando a Ideia
                                              ¸


Sobre a Palestra



           ¸˜                                ´
     Motivacao, dificuldades e vantagens dos metodos
         ˜
     Padroes de desenvolvimento no WordPress
                   ´
     Estrutura de codigo
     Interfaces com o WordPress
                 ´      ´
     Ferramentas uteis ja presentes no WordPress




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                      Introducao             ¸˜
                                   Apresentacao
                             ˜
                         Padroes   Sobre a Palestra
               Desenvolvimento            ¸˜
                                   Motivacao
                     ¸˜
            Consideracoes Finais   Avancando a Ideia
                                        ¸


      ¸˜
Motivacao




            Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao             ¸˜
                                         Apresentacao
                                   ˜
                               Padroes   Sobre a Palestra
                     Desenvolvimento            ¸˜
                                         Motivacao
                           ¸˜
                  Consideracoes Finais   Avancando a Ideia
                                              ¸


Motivos para se criar um plugin



     Funcionalidade inexistente
                         ¸˜
     Diferente implementacao de uma funcionalidade existente
      ´                  ´
     Codigos de tema portaveis
               ¸˜
     Implementacoes modulares para clientes
                                ˜
     Forks para ajustes e extensoes de plugins existentes




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao             ¸˜
                                         Apresentacao
                                   ˜
                               Padroes   Sobre a Palestra
                     Desenvolvimento            ¸˜
                                         Motivacao
                           ¸˜
                  Consideracoes Finais   Avancando a Ideia
                                              ¸


Perguntas




              ¸˜
     Demonstracao, apoio ou funcionalidade cr´tica?
                                             ı
     Comunidade, visibilidade ou emprego?
     Tempo para suporte?




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao             ¸˜
                                         Apresentacao
                                   ˜
                               Padroes   Sobre a Palestra
                     Desenvolvimento            ¸˜
                                         Motivacao
                           ¸˜
                  Consideracoes Finais   Avancando a Ideia
                                              ¸


Dificuldades em se escrever um plugin




     PHP X WordPress
                                    ¸˜         ¸˜      ´
     Cultura de leitura de documentacao e inspecao de codigo
     Barreira de idioma




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao             ¸˜
                                         Apresentacao
                                   ˜
                               Padroes   Sobre a Palestra
                     Desenvolvimento            ¸˜
                                         Motivacao
                           ¸˜
                  Consideracoes Finais   Avancando a Ideia
                                              ¸


                                      ´
Vantagens de se seguir algumas boas praticas



      ´
     Codigo leg´vel
               ı
              ¸˜
     Padronizacao de estruturas
     Melhor aprendizado de outros desenvolvedores
                   ¸˜      ´
     Melhor manutencao do codigo
     Extensibilidade
     Distributividade na comunidade do software livre




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                          Introducao              ¸˜
                                        Apresentacao
                                 ˜
                             Padroes    Sobre a Palestra
                   Desenvolvimento             ¸˜
                                        Motivacao
                         ¸˜
                Consideracoes Finais    Avancando a Ideia
                                             ¸


Pensando Em Um Plugin



         ¸˜
    Definicao de escopo e pesquisa de funcionalidades
    Se parecer redundante, perguntar e descrever a ideia em
              ´
    listas e foruns
                    ´
    Escolha de nome unico e relevante
          ¸˜
    Avaliacao do uso de outras tecnologias e frameworks




                 Vinicius Massuchetto   Plugins no WordPress
¸˜
          Introducao                ˜
                       Primeiro Padrao
                 ˜
             Padroes   Arquivos
   Desenvolvimento         ˜        ´
                       Padroes de Codigo
         ¸˜
Consideracoes Finais       ˜
                       Padroes de SQL




Vinicius Massuchetto   Plugins no WordPress
¸˜
                        Introducao                    ˜
                                         Primeiro Padrao
                               ˜
                           Padroes       Arquivos
                 Desenvolvimento             ˜        ´
                                         Padroes de Codigo
                       ¸˜
              Consideracoes Finais           ˜
                                         Padroes de SQL


             ˜
Primeiro Padrao




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                             Introducao                ˜
                                          Primeiro Padrao
                                    ˜
                                Padroes   Arquivos
                      Desenvolvimento         ˜        ´
                                          Padroes de Codigo
                            ¸˜
                   Consideracoes Finais       ˜
                                          Padroes de SQL


Arquivos


                   ´
     Nomear o diretorio e os arquivos coerentemente
                                       ´
     Incluir somente arquivos necessarios e sob demanda no
       ´
     codigo
                         ´                             ¸˜
     Permitir que o diretorio do plugin mude usando funcoes
     como:
           plugins url
           plugin dir url
           plugin dir path




                   Vinicius Massuchetto   Plugins no WordPress
¸˜
                             Introducao                ˜
                                          Primeiro Padrao
                                    ˜
                                Padroes   Arquivos
                      Desenvolvimento         ˜        ´
                                          Padroes de Codigo
                            ¸˜
                   Consideracoes Finais       ˜
                                          Padroes de SQL


     ¸˜
Nomeacao


 ./some-plugin
   ./img
   ./inc
   ./js
     + sp.js
     + somelib.js
   + sp.php                <-- arquivo principal
   + sp-functions.php
   + sp-admin.php
   + sp-cache.php




                   Vinicius Massuchetto   Plugins no WordPress
¸˜
                                 Introducao                ˜
                                              Primeiro Padrao
                                        ˜
                                    Padroes   Arquivos
                          Desenvolvimento         ˜        ´
                                              Padroes de Codigo
                                ¸˜
                       Consideracoes Finais       ˜
                                              Padroes de SQL


      ˜
Inclusao Condicional

  if ( is_admin() ){

      /* interface administrativa */

      add_action ...
      add_filter ...

  } else {

      /* frontend */

      add_action ...
      add_filter ...

  }


                       Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao                ˜
                                         Primeiro Padrao
                                   ˜
                               Padroes   Arquivos
                     Desenvolvimento         ˜        ´
                                         Padroes de Codigo
                           ¸˜
                  Consideracoes Finais       ˜
                                         Padroes de SQL


    ˜       ´
Padroes de Codigo



                     ˜                      ´
     Ater-se aos padroes recomendados para codigo e
                ¸˜
     documentacao
                               ¸˜
     Nomear as estruturas e funcoes com um identificador
     ´
     unico
             ´
     Clareza e melhor do que praticidade




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                              Introducao                ˜
                                           Primeiro Padrao
                                     ˜
                                 Padroes   Arquivos
                       Desenvolvimento         ˜        ´
                                           Padroes de Codigo
                             ¸˜
                    Consideracoes Finais       ˜
                                           Padroes de SQL


Tag PHP



 Errado
 <? /* code */ ?>

 <?=$var?>

 <% /* code */ %>




                    Vinicius Massuchetto   Plugins no WordPress
¸˜
                             Introducao                ˜
                                          Primeiro Padrao
                                    ˜
                                Padroes   Arquivos
                      Desenvolvimento         ˜        ´
                                          Padroes de Codigo
                            ¸˜
                   Consideracoes Finais       ˜
                                          Padroes de SQL


Tag PHP




 Certo
 <?php /* code */ ?>

 <?php echo $var; ?>




                   Vinicius Massuchetto   Plugins no WordPress
¸˜
                             Introducao                ˜
                                          Primeiro Padrao
                                    ˜
                                Padroes   Arquivos
                      Desenvolvimento         ˜        ´
                                          Padroes de Codigo
                            ¸˜
                   Consideracoes Finais       ˜
                                          Padroes de SQL


Chaves


 Errado
 if(condition)
 {
      action1();
      action2();
 }
 else
 {
      action3();
      action4();
 }




                   Vinicius Massuchetto   Plugins no WordPress
¸˜
                                Introducao                ˜
                                             Primeiro Padrao
                                       ˜
                                   Padroes   Arquivos
                         Desenvolvimento         ˜        ´
                                             Padroes de Codigo
                               ¸˜
                      Consideracoes Finais       ˜
                                             Padroes de SQL


Chaves



 Certo
 if ( condition ) {
     action1();
     action2();
 } else {
     action3();
     action4();
 }




                      Vinicius Massuchetto   Plugins no WordPress
¸˜
                                Introducao                ˜
                                             Primeiro Padrao
                                       ˜
                                   Padroes   Arquivos
                         Desenvolvimento         ˜        ´
                                             Padroes de Codigo
                               ¸˜
                      Consideracoes Finais       ˜
                                             Padroes de SQL


   ¸˜
Funcoes



  Errado
  function some_function($param1=’foo’, $param2=’bar’) {
      /* code */
  }

  class SomeClass {
      /* code */
  }




                      Vinicius Massuchetto   Plugins no WordPress
¸˜
                                 Introducao                ˜
                                              Primeiro Padrao
                                        ˜
                                    Padroes   Arquivos
                          Desenvolvimento         ˜        ´
                                              Padroes de Codigo
                                ¸˜
                       Consideracoes Finais       ˜
                                              Padroes de SQL


   ¸˜
Funcoes



  Certo
  function some_function( $param1 = ’foo’, $param2 = ’bar’ ) {
      /* code */
  }

  class Some_Class {
      /* code */
  }




                       Vinicius Massuchetto   Plugins no WordPress
¸˜
                               Introducao                ˜
                                            Primeiro Padrao
                                      ˜
                                  Padroes   Arquivos
                        Desenvolvimento         ˜        ´
                                            Padroes de Codigo
                              ¸˜
                     Consideracoes Finais       ˜
                                            Padroes de SQL


Vetores




  Errado
  $x = $foo[$bar];

  $x = $foo[ ’bar’ ];




                     Vinicius Massuchetto   Plugins no WordPress
¸˜
                                 Introducao                ˜
                                              Primeiro Padrao
                                        ˜
                                    Padroes   Arquivos
                          Desenvolvimento         ˜        ´
                                              Padroes de Codigo
                                ¸˜
                       Consideracoes Finais       ˜
                                              Padroes de SQL


Vetores




  Certo
  $x = $foo[ $bar ];

  $x = $foo[’bar’];




                       Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao                ˜
                                         Primeiro Padrao
                                   ˜
                               Padroes   Arquivos
                     Desenvolvimento         ˜        ´
                                         Padroes de Codigo
                           ¸˜
                  Consideracoes Finais       ˜
                                         Padroes de SQL


    ˜
Padroes de SQL



    Evitar escrever consultas
    Utilizar filtros para a WP Query
    Escrever as palavras SQL em caixa alta
                                             ´
    Validar os tipos de dados antes de utiliza-los
    Utilizar a wpdb
    Se precisar criar tabelas no banco, use $wpdb->prefix




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
                              Introducao                ˜
                                           Primeiro Padrao
                                     ˜
                                 Padroes   Arquivos
                       Desenvolvimento         ˜        ´
                                           Padroes de Codigo
                             ¸˜
                    Consideracoes Finais       ˜
                                           Padroes de SQL


Exemplo de Consulta




  Errado
  $r = $wpdb->get_results("select * from wp_posts where post_date
      > ’2012-08-25 00:00:00’");




                    Vinicius Massuchetto   Plugins no WordPress
¸˜
                              Introducao                ˜
                                           Primeiro Padrao
                                     ˜
                                 Padroes   Arquivos
                       Desenvolvimento         ˜        ´
                                           Padroes de Codigo
                             ¸˜
                    Consideracoes Finais       ˜
                                           Padroes de SQL


Exemplo de Consulta


  Certo
  $r = $wpdb->get_results( $wpdb->prepare(
      "
      SELECT ID, post_title, post_content
      FROM $wpdb->posts
      WHERE 1=1
          AND post_date > ’%s’
      "
  , $some_date ) );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                 ¸˜
          Introducao
                       Interfaces
                 ˜
             Padroes
                       Scripts e Estilos
   Desenvolvimento
                       Ferramentas
         ¸˜
Consideracoes Finais
                       Liberando na Comunidade




Vinicius Massuchetto   Plugins no WordPress
Estrutura
                         ¸˜
                  Introducao
                               Interfaces
                         ˜
                     Padroes
                               Scripts e Estilos
           Desenvolvimento
                               Ferramentas
                 ¸˜
        Consideracoes Finais
                               Liberando na Comunidade


Debug




        Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Constantes de debug no wp-config.php



     WP DEBUG
     WP DEBUG LOG
     WP DEBUG DISPLAY
     SCRIPT DEBUG
     SAVEQUERIES




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Cabecalho
    ¸


  Todo plugin comeca pelo comeco..
                  ¸           ¸
  /*
   * Plugin Name: Nome do Plugin
   * Version: 0.01
   * Description: Texto longo
   * Author: Nome do Autor
   * Contributors: Logins no WordPress.org
   * Plugin URI: http://uma-url.com
   */




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Estrutura Procedural



  function callback1 () { /* code */ }
  add_action( ’hook1’, ’callback1’ );

  function callback2 () { /* code */ }
  add_action( ’hook2’, ’callback2’ );

  function callback3 ($param) { /* code */ return $param; }
  add_filter( ’filter’, ’callback3’ );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Estrutura Orientada a Objetos


  class Some_Plugin {

      function Some_Plugin() {
          add_action( ’hook1’, array($this, ’hook1’ ));
          add_action( ’hook1’, array($this, ’hook2’ ));
      }

      function hook1 { /* code */ }
      function hook2 { /* code */ }

  }




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                          Interfaces
                                   ˜
                               Padroes
                                          Scripts e Estilos
                     Desenvolvimento
                                          Ferramentas
                           ¸˜
                  Consideracoes Finais
                                          Liberando na Comunidade


                    ¸˜
Vantagens da Orientacao a Objetos em Plugins




                 ´
     Organiza o codigo
     Melhora a extensibilidade
     Reduz o impacto no escopo global do PHP
              ˜                 ´
     Ajuda a nao introduzir variaveis globais




                   Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


     ¸˜
Ativacao




     register activation hook
         ¸˜       ¸˜       ˜
     Criacao de opcoes padrao
         ¸˜
     Criacao de tabelas
          ¸˜                      ´
     Exibicao de avisos para o usuario configurar o plugin




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


        ¸˜
Desativacao




     register deactivation hook
               ˜
     Em geral nao deve causar nenhuma perda de dados
     Desabilitar plugins dependentes




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                  ¸˜
                           Introducao
                                         Interfaces
                                  ˜
                              Padroes
                                         Scripts e Estilos
                    Desenvolvimento
                                         Ferramentas
                          ¸˜
                 Consideracoes Finais
                                         Liberando na Comunidade


          ¸˜
Desinstalacao



     register uninstall hook
      ˜
     Nao deve deixar nenhum dado residual no WordPress
              ¸˜         ´
     Remove opcoes do usuario
     Remove tabelas
                ´
     Avisa o usuario antes de remover qualquer dado
     (admin notices)




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                          Interfaces
                                   ˜
                               Padroes
                                          Scripts e Estilos
                     Desenvolvimento
                                          Ferramentas
                           ¸˜
                  Consideracoes Finais
                                          Liberando na Comunidade


          ¸˜
Inicializacao




      * init()
                      ´
      Geralmente atraves de um procedimento inicializador




                   Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


          ¸˜
Inicializacao



  function someplugin_init () {
      add_action( ’hook1’, ’callback1’ );
      add_action( ’hook2’, ’callback2’ );
      add_filter( ’filter’, ’callback3’ );
  }
  someplugin_init();

  add_action( ’plugins_loaded’, ’someplugin_init’ );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                        ¸˜
                                 Introducao
                                              Interfaces
                                        ˜
                                    Padroes
                                              Scripts e Estilos
                          Desenvolvimento
                                              Ferramentas
                                ¸˜
                       Consideracoes Finais
                                              Liberando na Comunidade


          ¸˜
Inicializacao

  class Some_Plugin {

      function SomePlugin() {
          add_action( ’hook1’, array($this, ’hook1’ ));
          add_action( ’hook1’, array($this, ’hook2’ ));
      }

      function hook1 { /* code */ }
      function hook2 { /* code */ }

  }
  new Some_Plugin();

  add_action( ’plugins_loaded’,
      array( ’Some_Plugin’, ’Some_Plugin’ ));


                       Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                    ¸˜
                             Introducao
                                          Interfaces
                                    ˜
                                Padroes
                                          Scripts e Estilos
                      Desenvolvimento
                                          Ferramentas
                            ¸˜
                   Consideracoes Finais
                                          Liberando na Comunidade


Consultas



  Sempre prefira a WP Query em loops estruturados:
      have posts
      the post
      next post
      rewrind posts




                   Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Consultas

  Nunca fuja do loop:
  <?php if ( have_posts() ) : ?>

    <?php while ( have_posts() ) : the_post(); ?>

      <?php // content ?>

    <?php endwhile; ?>

  <?php else : ?>

    <?php // not found ?>

  <?php endif; ?>


                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                    ¸˜
                             Introducao
                                          Interfaces
                                    ˜
                                Padroes
                                          Scripts e Estilos
                      Desenvolvimento
                                          Ferramentas
                            ¸˜
                   Consideracoes Finais
                                          Liberando na Comunidade


Filtros de Consulta




     posts where
     posts join
     posts orderby
     posts groupby




                   Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                    ¸˜
                             Introducao
                                          Interfaces
                                    ˜
                                Padroes
                                          Scripts e Estilos
                      Desenvolvimento
                                          Ferramentas
                            ¸˜
                   Consideracoes Finais
                                          Liberando na Comunidade


Banco de dados



     ´
  Em ultimo caso, use a wpdb:
      query
      prepare
      insert
      update
      get var




                   Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Tratando dados para consultas


  $wpdb->get_var( $wpdb->prepare(
       "
       SELECT foo
       FROM {$wpdb->table}
       WHERE 1=1
           AND bar_id = %d
           AND bar_slug = %s
       ",
       $id, $slug
  ) );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


        ¸˜
Uso de Acoes e Filtros




                    ¸˜
     Base da construcao de plugins no WordPress
     Certificar-se de agendar os eventos e tratar os dados
     adequadamente




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


          ¸˜      ¸˜
Implementacao de Acoes e Filtros




     Oferecer extensibilidade aos dados gerados
                         ¸˜                         `
     Possibilitar a insercao de novos procedimentos a medida
     que eventos relevantes acontecem




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


          ¸˜      ¸˜
Implementacao de Acoes


  function show_something() {
      do_action( ’before_show_something’ );
      /* something */
      do_action( ’after_show_something’ );
  }

  function show_something_header() { /* header */ }
  add_action( ’before_show_something’, ’show_something_header’ );

  function show_something_footer() { /* footer */ }
  add_action( ’after_show_something’, ’show_something_footer’ );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


          ¸˜
Implementacao de Filtros

  function get_something ( $param ) {

      /* get $something */

      return apply_filters( ’get_something’, $something );
  }

  function parse_something ( $something ) {

      return preg_replace( $regex, $replace, $something );

  }
  add_filter( ’get_something’, ’parse_something’ );



                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


          ¸˜      ¸˜
Implementacao de Acoes e Filtros
  <form>
  <?php foreach ( $field as $f ) : ?>
      <?php $f = apply_filters( ’display_field’, $f ); ?>
      <?php do_action( ’before_display_field’, $f ); ?>

      <input
          name="<?php echo $f[’name’]; ?>"
          type="<?php echo $f[’type’]; ?>"
          value="<?php echo $f[’value’]; ?>" />

      <?php do_action( ’after_display_field’, $f ); ?>
  <?php endforeach; ?>

  <?php do_action( ’before_submit’ ); ?>
  <input type="submit" value="Enviar" />

  </form>
                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Adicionando scripts



  Errado
  No tema:
  <html>
  <head>
      ...
      <script type="text/javascript" src="script.js" />
  </head>




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Adicionando scripts



  Errado
  function custom_scripts() {
      <script type="text/javascript" src="script.js" />
      <script type="text/javascript">
          someCall();
      </script>
  }
  add_action( ’custom_scripts’, ’wp_head’ );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                 ¸˜
                          Introducao
                                        Interfaces
                                 ˜
                             Padroes
                                        Scripts e Estilos
                   Desenvolvimento
                                        Ferramentas
                         ¸˜
                Consideracoes Finais
                                        Liberando na Comunidade


Enfileiradores de scripts


     ¸˜
  Funcoes:
     wp enqueue script
     wp enqueue style
     wp localize script
  Hooks:
     wp enqueue scripts
     admin enqueue scripts




                 Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Incluindo scripts



  function custom_scripts() {
      wp_enqueue_script( ’jquery’ );
      wp_enqueue_script( ’my_script’,
          ’my_script.js’, array( ’jquery’ ) );
  }
  add_action( ’wp_enqueue_scripts’, ’custom_scripts’ );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


                          ´
Incluindo scripts com variaveis


  function custom_scripts() {
      wp_enqueue_script( ’jquery’ );
      wp_enqueue_script( ’my_script’,
          ’my_script.js’, array( ’jquery’ ) );
      $params = array(
          ’key1’ => ’val1’,
          ’key2’ => ’val2’
      );
      wp_localize_script( ’my_plugin’, ’params’, $params );
  }
  add_action( ’wp_enqueue_scripts’, ’custom_scripts’ );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


                          ´
Incluindo scripts com variaveis: resultado



  <script .. jquery.js .. ></script>

  <script type="text/javascript">
  /* <![CDATA[ */
  var params = {"key1":"val1","key2":"val2"};
  /* ]]> */
  </script>

  <script .. my_script.js .. ></script>




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                 ¸˜
          Introducao
                       Interfaces
                 ˜
             Padroes
                       Scripts e Estilos
   Desenvolvimento
                       Ferramentas
         ¸˜
Consideracoes Finais
                       Liberando na Comunidade




Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                  ¸˜
                           Introducao
                                        Interfaces
                                  ˜
                              Padroes
                                        Scripts e Estilos
                    Desenvolvimento
                                        Ferramentas
                          ¸˜
                 Consideracoes Finais
                                        Liberando na Comunidade


                ¸˜
Internacionalizacao




             ¸˜
     Usar funcoes () e e()
     Carregar o arquivo MO




                 Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


                ¸˜
Internacionalizacao



  echo __( ’String a ser traduzida’, ’plugin_textdomain’ );

  _e( ’String a ser traduzida’, ’plugin_textdomain’ );

  printf(
      __( ’String com um valor %s qualquer no meio’,
          ’plugin_textdomain’ ),
      $string
  );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


                ¸˜
Internacionalizacao



  function plugin_textdomain() {
      load_plugin_textdomain( ’plugin_textdomain’, false,
          dirname( plugin_basename( __FILE__ ) ) . ’/lang/’ );

  }
  add_action( ’plugins_loaded’, ’plugin_textdomain’ );




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                ¸˜
                         Introducao
                                      Interfaces
                                ˜
                            Padroes
                                      Scripts e Estilos
                  Desenvolvimento
                                      Ferramentas
                        ¸˜
               Consideracoes Finais
                                      Liberando na Comunidade


Tratamento de Erros




               Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


Tratamento de erros




              ¸˜
     Instanciacoes da WP Error
            ¸˜
     Verificacao com is wp error
     Utilizar a wp die para morrer elegantemente




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Tratamento de erros
  function some_func( $param ) {

      $error = false;

      if ( ! empty( $param ) )
          $error = new WP_Error( ’plugin_name’,
              sprintf( __( ’Parametro %1$s invalido no arquivo
      %2$s linha %3$s.’,
                  ’plugin_textdomain’ ),
                  ’$param’, __FILE__, __LINE__ ) );

      if ( is_wp_error ( $error ) )
          wp_die ( $error, ’Argumento invalido.’ );

      /* func */

  }
                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Tratamento de erros com objetos


  class Some_Plugin {

      var $error;

      function Some_Plugin() {
          $this->error = new WP_Error ( ’plugin_name’ );

          /* hooks */

      }

  }




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                               ¸˜
                        Introducao
                                      Interfaces
                               ˜
                           Padroes
                                      Scripts e Estilos
                 Desenvolvimento
                                      Ferramentas
                       ¸˜
              Consideracoes Finais
                                      Liberando na Comunidade


             ¸˜   ´
Classes e Funcoes Uteis




               Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                 ¸˜
                          Introducao
                                        Interfaces
                                 ˜
                             Padroes
                                        Scripts e Estilos
                   Desenvolvimento
                                        Ferramentas
                         ¸˜
                Consideracoes Finais
                                        Liberando na Comunidade


        ¸˜
Manipulacao de Dados




     wp parse args
     wp list filter




                 Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


       ¸˜
Formatacao


    is email
    remove accents
    sanitize title
    sanitize email
    seems utf8
    zeroise
    wptexturize




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                  ¸˜
                           Introducao
                                        Interfaces
                                  ˜
                              Padroes
                                        Scripts e Estilos
                    Desenvolvimento
                                        Ferramentas
                          ¸˜
                 Consideracoes Finais
                                        Liberando na Comunidade


Transients API




     set transient
     get transient
     delete transient




                 Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                ¸˜
                         Introducao
                                       Interfaces
                                ˜
                            Padroes
                                       Scripts e Estilos
                  Desenvolvimento
                                       Ferramentas
                        ¸˜
               Consideracoes Finais
                                       Liberando na Comunidade


HTTP API




    wp remote get
    wp remote retrieve body
    wp remote retrieve headers




                Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                     ¸˜
                              Introducao
                                           Interfaces
                                     ˜
                                 Padroes
                                           Scripts e Estilos
                       Desenvolvimento
                                           Ferramentas
                             ¸˜
                    Consideracoes Finais
                                           Liberando na Comunidade


Object Cache



     wp cache add
     wp cache set
     wp cache get
     wp cache delete
     wp cache flush




                    Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                          Interfaces
                                   ˜
                               Padroes
                                          Scripts e Estilos
                     Desenvolvimento
                                          Ferramentas
                           ¸˜
                  Consideracoes Finais
                                          Liberando na Comunidade


Cron




       wp schedule event
       wp schedule single event
       wp unschedule event
       wp next scheduled




                   Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                  ¸˜
                           Introducao
                                        Interfaces
                                  ˜
                              Padroes
                                        Scripts e Estilos
                    Desenvolvimento
                                        Ferramentas
                          ¸˜
                 Consideracoes Finais
                                        Liberando na Comunidade

        ´
Classes Uteis




     SimplePie
     PHPMailer




                 Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


   ¸˜   ´
Funcoes Uteis




     wp mail
     fetch feed
     human time diff




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                               ¸˜
                        Introducao
                                     Interfaces
                               ˜
                           Padroes
                                     Scripts e Estilos
                 Desenvolvimento
                                     Ferramentas
                       ¸˜
              Consideracoes Finais
                                     Liberando na Comunidade


Liberando na comunidade




              Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                   ¸˜
                            Introducao
                                         Interfaces
                                   ˜
                               Padroes
                                         Scripts e Estilos
                     Desenvolvimento
                                         Ferramentas
                           ¸˜
                  Consideracoes Finais
                                         Liberando na Comunidade


Liberando na comunidade




                                   ´
     Requerer hospedagem no repositorio SVN oficial
                         ¸˜
     Escrever a documentacao
                                  ¸˜
     Fazer uma imagem de apresentacao
                    ¸˜                               ¸˜
     Avaliar requisicoes de suporte e gerenciar traducoes




                  Vinicius Massuchetto   Plugins no WordPress
Estrutura
                                        ¸˜
                                 Introducao
                                              Interfaces
                                        ˜
                                    Padroes
                                              Scripts e Estilos
                          Desenvolvimento
                                              Ferramentas
                                ¸˜
                       Consideracoes Finais
                                              Liberando na Comunidade


readme.txt de um plugin

  === Plugin Name ===

  == Description ==

  == Installation ==

  == Frequently Asked Questions ==

  == Screenshots ==

  == Changelog ==

  == Arbitrary section ==



                       Vinicius Massuchetto   Plugins no WordPress
Estrutura
                 ¸˜
          Introducao
                       Interfaces
                 ˜
             Padroes
                       Scripts e Estilos
   Desenvolvimento
                       Ferramentas
         ¸˜
Consideracoes Finais
                       Liberando na Comunidade




Vinicius Massuchetto   Plugins no WordPress
¸˜
                            Introducao
                                   ˜
                               Padroes
                     Desenvolvimento
                           ¸˜
                  Consideracoes Finais


         ¸˜
Consideracoes Finais



     Interfaces altamente flex´veis
                             ı
     Conjunto de ferramentas amplo e dispon´vel
                                           ı
      ´           `         ¸˜
     Facil acesso as informacoes pelo desenvolvedor
       ˜                    ˜
     Nao tem desculpa para nao codificar e suportar um plugin
     com qualidade




                  Vinicius Massuchetto   Plugins no WordPress
¸˜
          Introducao
                 ˜
             Padroes
   Desenvolvimento
         ¸˜
Consideracoes Finais




Vinicius Massuchetto   Plugins no WordPress
¸˜
                          Introducao
                                 ˜
                             Padroes
                   Desenvolvimento
                         ¸˜
                Consideracoes Finais


     ˆ
Referencias




     Codex: Writing a Plugins
     http://codex.wordpress.org/Writing_a_Plugin
     WordPress Answers
     http://wordpress.stackexchange.com/questions/715/
     objective-best-practices-for-plugin-development




                Vinicius Massuchetto   Plugins no WordPress

Más contenido relacionado

Destacado

Scrum: Na prática o que importa são os Valores
Scrum: Na prática o que importa são os ValoresScrum: Na prática o que importa são os Valores
Scrum: Na prática o que importa são os ValoresDanilo Bardusco
 
Domain-Driven Design com PHP
Domain-Driven Design com PHPDomain-Driven Design com PHP
Domain-Driven Design com PHPThiago Colares
 
Montando um ambiente de desenvolvimento WordPress utilizando Composer e GIT
Montando um ambiente de desenvolvimento WordPress utilizando Composer e GITMontando um ambiente de desenvolvimento WordPress utilizando Composer e GIT
Montando um ambiente de desenvolvimento WordPress utilizando Composer e GITLeo Baiano
 
Wordpress SEO - Muito além de plugins
Wordpress SEO - Muito além de pluginsWordpress SEO - Muito além de plugins
Wordpress SEO - Muito além de pluginsFabio Ricotta
 
Wordpress, Guia/Manual do Publicador
Wordpress, Guia/Manual do PublicadorWordpress, Guia/Manual do Publicador
Wordpress, Guia/Manual do PublicadorRenato Vieira
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPressGuga Alves
 
WordPress da instalação à criação de temas personalizados para seu site
WordPress da instalação à criação de temas personalizados para seu siteWordPress da instalação à criação de temas personalizados para seu site
WordPress da instalação à criação de temas personalizados para seu siteFlávio Ricardo B. Meira
 
Estratégias Digitais para 2015 - #RDonTheRoad
Estratégias Digitais para 2015 - #RDonTheRoadEstratégias Digitais para 2015 - #RDonTheRoad
Estratégias Digitais para 2015 - #RDonTheRoadFabio Ricotta
 
Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Rildo (@rildosan) Santos
 
SEO para Blogs - Ganhando Milhares de Visitas
SEO para Blogs - Ganhando Milhares de VisitasSEO para Blogs - Ganhando Milhares de Visitas
SEO para Blogs - Ganhando Milhares de VisitasFabio Ricotta
 
Fazendo milagres com WordPress
Fazendo milagres com WordPressFazendo milagres com WordPress
Fazendo milagres com WordPressRafael Funchal
 
Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Rildo (@rildosan) Santos
 
Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)Rildo (@rildosan) Santos
 

Destacado (17)

Scrum: Na prática o que importa são os Valores
Scrum: Na prática o que importa são os ValoresScrum: Na prática o que importa são os Valores
Scrum: Na prática o que importa são os Valores
 
Domain-Driven Design com PHP
Domain-Driven Design com PHPDomain-Driven Design com PHP
Domain-Driven Design com PHP
 
Montando um ambiente de desenvolvimento WordPress utilizando Composer e GIT
Montando um ambiente de desenvolvimento WordPress utilizando Composer e GITMontando um ambiente de desenvolvimento WordPress utilizando Composer e GIT
Montando um ambiente de desenvolvimento WordPress utilizando Composer e GIT
 
Wordpress SEO - Muito além de plugins
Wordpress SEO - Muito além de pluginsWordpress SEO - Muito além de plugins
Wordpress SEO - Muito além de plugins
 
Apostila Wordpress
Apostila WordpressApostila Wordpress
Apostila Wordpress
 
Wordpress, Guia/Manual do Publicador
Wordpress, Guia/Manual do PublicadorWordpress, Guia/Manual do Publicador
Wordpress, Guia/Manual do Publicador
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPress
 
WordPress da instalação à criação de temas personalizados para seu site
WordPress da instalação à criação de temas personalizados para seu siteWordPress da instalação à criação de temas personalizados para seu site
WordPress da instalação à criação de temas personalizados para seu site
 
Estratégias Digitais para 2015 - #RDonTheRoad
Estratégias Digitais para 2015 - #RDonTheRoadEstratégias Digitais para 2015 - #RDonTheRoad
Estratégias Digitais para 2015 - #RDonTheRoad
 
Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case Como demonstrar ROI das entregas de valor com Business Case
Como demonstrar ROI das entregas de valor com Business Case
 
Resumo do Guia BABOK® 3
Resumo do Guia BABOK®  3 Resumo do Guia BABOK®  3
Resumo do Guia BABOK® 3
 
SEO para Blogs - Ganhando Milhares de Visitas
SEO para Blogs - Ganhando Milhares de VisitasSEO para Blogs - Ganhando Milhares de Visitas
SEO para Blogs - Ganhando Milhares de Visitas
 
Fazendo milagres com WordPress
Fazendo milagres com WordPressFazendo milagres com WordPress
Fazendo milagres com WordPress
 
Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)
 
Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)Engenharia de Software 100% Agil (SCRUM, FDD e XP)
Engenharia de Software 100% Agil (SCRUM, FDD e XP)
 
Scrum Experience [O Tutorial Scrum]
Scrum Experience [O Tutorial Scrum]Scrum Experience [O Tutorial Scrum]
Scrum Experience [O Tutorial Scrum]
 
Análise de Negócio na Perspectiva de BI
Análise de Negócio na Perspectiva de BIAnálise de Negócio na Perspectiva de BI
Análise de Negócio na Perspectiva de BI
 

Similar a Plugins no WordPress: Fazendo o Negócio Direito

Grandes Migrações: Passando de Qualquer Plataforma Para o WordPress
Grandes Migrações: Passando de Qualquer Plataforma Para o WordPressGrandes Migrações: Passando de Qualquer Plataforma Para o WordPress
Grandes Migrações: Passando de Qualquer Plataforma Para o WordPressVinicius Massuchetto
 
O Pensamento Enxuto no Planejamento de Projetos de Inovação
O Pensamento Enxuto no Planejamentode Projetos de InovaçãoO Pensamento Enxuto no Planejamentode Projetos de Inovação
O Pensamento Enxuto no Planejamento de Projetos de InovaçãoLuiz C. Parzianello
 
Webcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinar
Webcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinarWebcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinar
Webcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinarGrupo Treinar
 
Consultoria sobre Posicionamento e Conteudo
Consultoria sobre Posicionamento e ConteudoConsultoria sobre Posicionamento e Conteudo
Consultoria sobre Posicionamento e ConteudoGrupo Treinar
 
Reunião APL de Fundição 22.01.2013
Reunião APL de Fundição 22.01.2013Reunião APL de Fundição 22.01.2013
Reunião APL de Fundição 22.01.2013sifumg
 
Leadership challenge proposta
Leadership challenge propostaLeadership challenge proposta
Leadership challenge propostaErikita2404
 
Palestra Modelagem Ágil - Manoel Pimentel
Palestra Modelagem Ágil -  Manoel PimentelPalestra Modelagem Ágil -  Manoel Pimentel
Palestra Modelagem Ágil - Manoel PimentelManoel Pimentel Medeiros
 
Planejamento EstratéGico Pessoal
Planejamento EstratéGico PessoalPlanejamento EstratéGico Pessoal
Planejamento EstratéGico PessoalMarcelo Bastos
 
Employer Branding 27 Nov08 [Modo De Compatibilidade]
Employer Branding 27 Nov08 [Modo De Compatibilidade]Employer Branding 27 Nov08 [Modo De Compatibilidade]
Employer Branding 27 Nov08 [Modo De Compatibilidade]Jose Bancaleiro
 
Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.
Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.
Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.Ricardo Castro
 
Palestra na Poli - Engenharia Francesa - 24.10.2011
Palestra na Poli - Engenharia Francesa - 24.10.2011Palestra na Poli - Engenharia Francesa - 24.10.2011
Palestra na Poli - Engenharia Francesa - 24.10.2011Frédéric Donier
 
Academia de Lideranças | Programa de Desenvolvimento de Líderes
Academia de Lideranças | Programa de Desenvolvimento de LíderesAcademia de Lideranças | Programa de Desenvolvimento de Líderes
Academia de Lideranças | Programa de Desenvolvimento de LíderesDMT Palestras
 
TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...
TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...
TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...tdc-globalcode
 

Similar a Plugins no WordPress: Fazendo o Negócio Direito (20)

Grandes Migrações: Passando de Qualquer Plataforma Para o WordPress
Grandes Migrações: Passando de Qualquer Plataforma Para o WordPressGrandes Migrações: Passando de Qualquer Plataforma Para o WordPress
Grandes Migrações: Passando de Qualquer Plataforma Para o WordPress
 
Elias alexandre-dos-santos---sebrae
Elias alexandre-dos-santos---sebraeElias alexandre-dos-santos---sebrae
Elias alexandre-dos-santos---sebrae
 
O Pensamento Enxuto no Planejamento de Projetos de Inovação
O Pensamento Enxuto no Planejamentode Projetos de InovaçãoO Pensamento Enxuto no Planejamentode Projetos de Inovação
O Pensamento Enxuto no Planejamento de Projetos de Inovação
 
Webcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinar
Webcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinarWebcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinar
Webcast Interativo sobre o Posicionamento e Atuacao do GrupoTreinar
 
Consultoria sobre Posicionamento e Conteudo
Consultoria sobre Posicionamento e ConteudoConsultoria sobre Posicionamento e Conteudo
Consultoria sobre Posicionamento e Conteudo
 
Reunião APL de Fundição 22.01.2013
Reunião APL de Fundição 22.01.2013Reunião APL de Fundição 22.01.2013
Reunião APL de Fundição 22.01.2013
 
Leadership challenge proposta
Leadership challenge propostaLeadership challenge proposta
Leadership challenge proposta
 
GC: Conceitos VS Práticas
GC: Conceitos VS PráticasGC: Conceitos VS Práticas
GC: Conceitos VS Práticas
 
Projeto Desenvolva
Projeto DesenvolvaProjeto Desenvolva
Projeto Desenvolva
 
[Coletivo Ação] Webinar introdução ao Design Sprint Com Mayra de Souza
[Coletivo Ação] Webinar introdução ao Design Sprint Com Mayra de Souza[Coletivo Ação] Webinar introdução ao Design Sprint Com Mayra de Souza
[Coletivo Ação] Webinar introdução ao Design Sprint Com Mayra de Souza
 
Palestra Modelagem Ágil - Manoel Pimentel
Palestra Modelagem Ágil -  Manoel PimentelPalestra Modelagem Ágil -  Manoel Pimentel
Palestra Modelagem Ágil - Manoel Pimentel
 
Ciesp
Ciesp Ciesp
Ciesp
 
Planejamento EstratéGico Pessoal
Planejamento EstratéGico PessoalPlanejamento EstratéGico Pessoal
Planejamento EstratéGico Pessoal
 
Employer Branding 27 Nov08 [Modo De Compatibilidade]
Employer Branding 27 Nov08 [Modo De Compatibilidade]Employer Branding 27 Nov08 [Modo De Compatibilidade]
Employer Branding 27 Nov08 [Modo De Compatibilidade]
 
Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.
Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.
Palestra de abertura do 1º Processo Seletivo EPro Consultoria Jr.
 
Vídeos na educação
Vídeos na educaçãoVídeos na educação
Vídeos na educação
 
Palestra na Poli - Engenharia Francesa - 24.10.2011
Palestra na Poli - Engenharia Francesa - 24.10.2011Palestra na Poli - Engenharia Francesa - 24.10.2011
Palestra na Poli - Engenharia Francesa - 24.10.2011
 
Academia de Lideranças | Programa de Desenvolvimento de Líderes
Academia de Lideranças | Programa de Desenvolvimento de LíderesAcademia de Lideranças | Programa de Desenvolvimento de Líderes
Academia de Lideranças | Programa de Desenvolvimento de Líderes
 
TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...
TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...
TDC2017 | São Paulo - Trilha Análise de Negócios How we figured out we had a ...
 
Pinealle 2021v2 (compacto)
Pinealle 2021v2 (compacto)Pinealle 2021v2 (compacto)
Pinealle 2021v2 (compacto)
 

Plugins no WordPress: Fazendo o Negócio Direito

  • 1. ¸˜ Introducao ˜ Padroes Desenvolvimento ¸˜ Consideracoes Finais Plugins no WordPress ´ Fazendo o Negocio Direito Vinicius Massuchetto Campus Party Brasil 2013 Fevereiro de 2013 Vinicius Massuchetto Plugins no WordPress
  • 2. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ ¸˜ Apresentacao @vmassuchetto http://github.com/vmassuchetto http://bitbucket.org/vmassuchetto ¸˜ Apresentacao dispon´vel em: ı http://vinicius.soylocoporti.org.br/?p=2191 Vinicius Massuchetto Plugins no WordPress
  • 3. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ Sobre a Palestra ¸˜ ´ Motivacao, dificuldades e vantagens dos metodos ˜ Padroes de desenvolvimento no WordPress ´ Estrutura de codigo Interfaces com o WordPress ´ ´ Ferramentas uteis ja presentes no WordPress Vinicius Massuchetto Plugins no WordPress
  • 4. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ ¸˜ Motivacao Vinicius Massuchetto Plugins no WordPress
  • 5. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ Motivos para se criar um plugin Funcionalidade inexistente ¸˜ Diferente implementacao de uma funcionalidade existente ´ ´ Codigos de tema portaveis ¸˜ Implementacoes modulares para clientes ˜ Forks para ajustes e extensoes de plugins existentes Vinicius Massuchetto Plugins no WordPress
  • 6. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ Perguntas ¸˜ Demonstracao, apoio ou funcionalidade cr´tica? ı Comunidade, visibilidade ou emprego? Tempo para suporte? Vinicius Massuchetto Plugins no WordPress
  • 7. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ Dificuldades em se escrever um plugin PHP X WordPress ¸˜ ¸˜ ´ Cultura de leitura de documentacao e inspecao de codigo Barreira de idioma Vinicius Massuchetto Plugins no WordPress
  • 8. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ ´ Vantagens de se seguir algumas boas praticas ´ Codigo leg´vel ı ¸˜ Padronizacao de estruturas Melhor aprendizado de outros desenvolvedores ¸˜ ´ Melhor manutencao do codigo Extensibilidade Distributividade na comunidade do software livre Vinicius Massuchetto Plugins no WordPress
  • 9. ¸˜ Introducao ¸˜ Apresentacao ˜ Padroes Sobre a Palestra Desenvolvimento ¸˜ Motivacao ¸˜ Consideracoes Finais Avancando a Ideia ¸ Pensando Em Um Plugin ¸˜ Definicao de escopo e pesquisa de funcionalidades Se parecer redundante, perguntar e descrever a ideia em ´ listas e foruns ´ Escolha de nome unico e relevante ¸˜ Avaliacao do uso de outras tecnologias e frameworks Vinicius Massuchetto Plugins no WordPress
  • 10. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Vinicius Massuchetto Plugins no WordPress
  • 11. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL ˜ Primeiro Padrao Vinicius Massuchetto Plugins no WordPress
  • 12. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Arquivos ´ Nomear o diretorio e os arquivos coerentemente ´ Incluir somente arquivos necessarios e sob demanda no ´ codigo ´ ¸˜ Permitir que o diretorio do plugin mude usando funcoes como: plugins url plugin dir url plugin dir path Vinicius Massuchetto Plugins no WordPress
  • 13. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL ¸˜ Nomeacao ./some-plugin ./img ./inc ./js + sp.js + somelib.js + sp.php <-- arquivo principal + sp-functions.php + sp-admin.php + sp-cache.php Vinicius Massuchetto Plugins no WordPress
  • 14. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL ˜ Inclusao Condicional if ( is_admin() ){ /* interface administrativa */ add_action ... add_filter ... } else { /* frontend */ add_action ... add_filter ... } Vinicius Massuchetto Plugins no WordPress
  • 15. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL ˜ ´ Padroes de Codigo ˜ ´ Ater-se aos padroes recomendados para codigo e ¸˜ documentacao ¸˜ Nomear as estruturas e funcoes com um identificador ´ unico ´ Clareza e melhor do que praticidade Vinicius Massuchetto Plugins no WordPress
  • 16. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Tag PHP Errado <? /* code */ ?> <?=$var?> <% /* code */ %> Vinicius Massuchetto Plugins no WordPress
  • 17. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Tag PHP Certo <?php /* code */ ?> <?php echo $var; ?> Vinicius Massuchetto Plugins no WordPress
  • 18. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Chaves Errado if(condition) { action1(); action2(); } else { action3(); action4(); } Vinicius Massuchetto Plugins no WordPress
  • 19. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Chaves Certo if ( condition ) { action1(); action2(); } else { action3(); action4(); } Vinicius Massuchetto Plugins no WordPress
  • 20. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL ¸˜ Funcoes Errado function some_function($param1=’foo’, $param2=’bar’) { /* code */ } class SomeClass { /* code */ } Vinicius Massuchetto Plugins no WordPress
  • 21. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL ¸˜ Funcoes Certo function some_function( $param1 = ’foo’, $param2 = ’bar’ ) { /* code */ } class Some_Class { /* code */ } Vinicius Massuchetto Plugins no WordPress
  • 22. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Vetores Errado $x = $foo[$bar]; $x = $foo[ ’bar’ ]; Vinicius Massuchetto Plugins no WordPress
  • 23. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Vetores Certo $x = $foo[ $bar ]; $x = $foo[’bar’]; Vinicius Massuchetto Plugins no WordPress
  • 24. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL ˜ Padroes de SQL Evitar escrever consultas Utilizar filtros para a WP Query Escrever as palavras SQL em caixa alta ´ Validar os tipos de dados antes de utiliza-los Utilizar a wpdb Se precisar criar tabelas no banco, use $wpdb->prefix Vinicius Massuchetto Plugins no WordPress
  • 25. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Exemplo de Consulta Errado $r = $wpdb->get_results("select * from wp_posts where post_date > ’2012-08-25 00:00:00’"); Vinicius Massuchetto Plugins no WordPress
  • 26. ¸˜ Introducao ˜ Primeiro Padrao ˜ Padroes Arquivos Desenvolvimento ˜ ´ Padroes de Codigo ¸˜ Consideracoes Finais ˜ Padroes de SQL Exemplo de Consulta Certo $r = $wpdb->get_results( $wpdb->prepare( " SELECT ID, post_title, post_content FROM $wpdb->posts WHERE 1=1 AND post_date > ’%s’ " , $some_date ) ); Vinicius Massuchetto Plugins no WordPress
  • 27. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Vinicius Massuchetto Plugins no WordPress
  • 28. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Debug Vinicius Massuchetto Plugins no WordPress
  • 29. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Constantes de debug no wp-config.php WP DEBUG WP DEBUG LOG WP DEBUG DISPLAY SCRIPT DEBUG SAVEQUERIES Vinicius Massuchetto Plugins no WordPress
  • 30. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Cabecalho ¸ Todo plugin comeca pelo comeco.. ¸ ¸ /* * Plugin Name: Nome do Plugin * Version: 0.01 * Description: Texto longo * Author: Nome do Autor * Contributors: Logins no WordPress.org * Plugin URI: http://uma-url.com */ Vinicius Massuchetto Plugins no WordPress
  • 31. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Estrutura Procedural function callback1 () { /* code */ } add_action( ’hook1’, ’callback1’ ); function callback2 () { /* code */ } add_action( ’hook2’, ’callback2’ ); function callback3 ($param) { /* code */ return $param; } add_filter( ’filter’, ’callback3’ ); Vinicius Massuchetto Plugins no WordPress
  • 32. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Estrutura Orientada a Objetos class Some_Plugin { function Some_Plugin() { add_action( ’hook1’, array($this, ’hook1’ )); add_action( ’hook1’, array($this, ’hook2’ )); } function hook1 { /* code */ } function hook2 { /* code */ } } Vinicius Massuchetto Plugins no WordPress
  • 33. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Vantagens da Orientacao a Objetos em Plugins ´ Organiza o codigo Melhora a extensibilidade Reduz o impacto no escopo global do PHP ˜ ´ Ajuda a nao introduzir variaveis globais Vinicius Massuchetto Plugins no WordPress
  • 34. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Ativacao register activation hook ¸˜ ¸˜ ˜ Criacao de opcoes padrao ¸˜ Criacao de tabelas ¸˜ ´ Exibicao de avisos para o usuario configurar o plugin Vinicius Massuchetto Plugins no WordPress
  • 35. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Desativacao register deactivation hook ˜ Em geral nao deve causar nenhuma perda de dados Desabilitar plugins dependentes Vinicius Massuchetto Plugins no WordPress
  • 36. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Desinstalacao register uninstall hook ˜ Nao deve deixar nenhum dado residual no WordPress ¸˜ ´ Remove opcoes do usuario Remove tabelas ´ Avisa o usuario antes de remover qualquer dado (admin notices) Vinicius Massuchetto Plugins no WordPress
  • 37. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Inicializacao * init() ´ Geralmente atraves de um procedimento inicializador Vinicius Massuchetto Plugins no WordPress
  • 38. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Inicializacao function someplugin_init () { add_action( ’hook1’, ’callback1’ ); add_action( ’hook2’, ’callback2’ ); add_filter( ’filter’, ’callback3’ ); } someplugin_init(); add_action( ’plugins_loaded’, ’someplugin_init’ ); Vinicius Massuchetto Plugins no WordPress
  • 39. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Inicializacao class Some_Plugin { function SomePlugin() { add_action( ’hook1’, array($this, ’hook1’ )); add_action( ’hook1’, array($this, ’hook2’ )); } function hook1 { /* code */ } function hook2 { /* code */ } } new Some_Plugin(); add_action( ’plugins_loaded’, array( ’Some_Plugin’, ’Some_Plugin’ )); Vinicius Massuchetto Plugins no WordPress
  • 40. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Consultas Sempre prefira a WP Query em loops estruturados: have posts the post next post rewrind posts Vinicius Massuchetto Plugins no WordPress
  • 41. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Consultas Nunca fuja do loop: <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <?php // content ?> <?php endwhile; ?> <?php else : ?> <?php // not found ?> <?php endif; ?> Vinicius Massuchetto Plugins no WordPress
  • 42. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Filtros de Consulta posts where posts join posts orderby posts groupby Vinicius Massuchetto Plugins no WordPress
  • 43. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Banco de dados ´ Em ultimo caso, use a wpdb: query prepare insert update get var Vinicius Massuchetto Plugins no WordPress
  • 44. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Tratando dados para consultas $wpdb->get_var( $wpdb->prepare( " SELECT foo FROM {$wpdb->table} WHERE 1=1 AND bar_id = %d AND bar_slug = %s ", $id, $slug ) ); Vinicius Massuchetto Plugins no WordPress
  • 45. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Uso de Acoes e Filtros ¸˜ Base da construcao de plugins no WordPress Certificar-se de agendar os eventos e tratar os dados adequadamente Vinicius Massuchetto Plugins no WordPress
  • 46. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ ¸˜ Implementacao de Acoes e Filtros Oferecer extensibilidade aos dados gerados ¸˜ ` Possibilitar a insercao de novos procedimentos a medida que eventos relevantes acontecem Vinicius Massuchetto Plugins no WordPress
  • 47. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ ¸˜ Implementacao de Acoes function show_something() { do_action( ’before_show_something’ ); /* something */ do_action( ’after_show_something’ ); } function show_something_header() { /* header */ } add_action( ’before_show_something’, ’show_something_header’ ); function show_something_footer() { /* footer */ } add_action( ’after_show_something’, ’show_something_footer’ ); Vinicius Massuchetto Plugins no WordPress
  • 48. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Implementacao de Filtros function get_something ( $param ) { /* get $something */ return apply_filters( ’get_something’, $something ); } function parse_something ( $something ) { return preg_replace( $regex, $replace, $something ); } add_filter( ’get_something’, ’parse_something’ ); Vinicius Massuchetto Plugins no WordPress
  • 49. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ ¸˜ Implementacao de Acoes e Filtros <form> <?php foreach ( $field as $f ) : ?> <?php $f = apply_filters( ’display_field’, $f ); ?> <?php do_action( ’before_display_field’, $f ); ?> <input name="<?php echo $f[’name’]; ?>" type="<?php echo $f[’type’]; ?>" value="<?php echo $f[’value’]; ?>" /> <?php do_action( ’after_display_field’, $f ); ?> <?php endforeach; ?> <?php do_action( ’before_submit’ ); ?> <input type="submit" value="Enviar" /> </form> Vinicius Massuchetto Plugins no WordPress
  • 50. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Adicionando scripts Errado No tema: <html> <head> ... <script type="text/javascript" src="script.js" /> </head> Vinicius Massuchetto Plugins no WordPress
  • 51. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Adicionando scripts Errado function custom_scripts() { <script type="text/javascript" src="script.js" /> <script type="text/javascript"> someCall(); </script> } add_action( ’custom_scripts’, ’wp_head’ ); Vinicius Massuchetto Plugins no WordPress
  • 52. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Enfileiradores de scripts ¸˜ Funcoes: wp enqueue script wp enqueue style wp localize script Hooks: wp enqueue scripts admin enqueue scripts Vinicius Massuchetto Plugins no WordPress
  • 53. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Incluindo scripts function custom_scripts() { wp_enqueue_script( ’jquery’ ); wp_enqueue_script( ’my_script’, ’my_script.js’, array( ’jquery’ ) ); } add_action( ’wp_enqueue_scripts’, ’custom_scripts’ ); Vinicius Massuchetto Plugins no WordPress
  • 54. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ´ Incluindo scripts com variaveis function custom_scripts() { wp_enqueue_script( ’jquery’ ); wp_enqueue_script( ’my_script’, ’my_script.js’, array( ’jquery’ ) ); $params = array( ’key1’ => ’val1’, ’key2’ => ’val2’ ); wp_localize_script( ’my_plugin’, ’params’, $params ); } add_action( ’wp_enqueue_scripts’, ’custom_scripts’ ); Vinicius Massuchetto Plugins no WordPress
  • 55. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ´ Incluindo scripts com variaveis: resultado <script .. jquery.js .. ></script> <script type="text/javascript"> /* <![CDATA[ */ var params = {"key1":"val1","key2":"val2"}; /* ]]> */ </script> <script .. my_script.js .. ></script> Vinicius Massuchetto Plugins no WordPress
  • 56. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Vinicius Massuchetto Plugins no WordPress
  • 57. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Internacionalizacao ¸˜ Usar funcoes () e e() Carregar o arquivo MO Vinicius Massuchetto Plugins no WordPress
  • 58. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Internacionalizacao echo __( ’String a ser traduzida’, ’plugin_textdomain’ ); _e( ’String a ser traduzida’, ’plugin_textdomain’ ); printf( __( ’String com um valor %s qualquer no meio’, ’plugin_textdomain’ ), $string ); Vinicius Massuchetto Plugins no WordPress
  • 59. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Internacionalizacao function plugin_textdomain() { load_plugin_textdomain( ’plugin_textdomain’, false, dirname( plugin_basename( __FILE__ ) ) . ’/lang/’ ); } add_action( ’plugins_loaded’, ’plugin_textdomain’ ); Vinicius Massuchetto Plugins no WordPress
  • 60. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Tratamento de Erros Vinicius Massuchetto Plugins no WordPress
  • 61. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Tratamento de erros ¸˜ Instanciacoes da WP Error ¸˜ Verificacao com is wp error Utilizar a wp die para morrer elegantemente Vinicius Massuchetto Plugins no WordPress
  • 62. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Tratamento de erros function some_func( $param ) { $error = false; if ( ! empty( $param ) ) $error = new WP_Error( ’plugin_name’, sprintf( __( ’Parametro %1$s invalido no arquivo %2$s linha %3$s.’, ’plugin_textdomain’ ), ’$param’, __FILE__, __LINE__ ) ); if ( is_wp_error ( $error ) ) wp_die ( $error, ’Argumento invalido.’ ); /* func */ } Vinicius Massuchetto Plugins no WordPress
  • 63. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Tratamento de erros com objetos class Some_Plugin { var $error; function Some_Plugin() { $this->error = new WP_Error ( ’plugin_name’ ); /* hooks */ } } Vinicius Massuchetto Plugins no WordPress
  • 64. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ ´ Classes e Funcoes Uteis Vinicius Massuchetto Plugins no WordPress
  • 65. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Manipulacao de Dados wp parse args wp list filter Vinicius Massuchetto Plugins no WordPress
  • 66. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ Formatacao is email remove accents sanitize title sanitize email seems utf8 zeroise wptexturize Vinicius Massuchetto Plugins no WordPress
  • 67. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Transients API set transient get transient delete transient Vinicius Massuchetto Plugins no WordPress
  • 68. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade HTTP API wp remote get wp remote retrieve body wp remote retrieve headers Vinicius Massuchetto Plugins no WordPress
  • 69. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Object Cache wp cache add wp cache set wp cache get wp cache delete wp cache flush Vinicius Massuchetto Plugins no WordPress
  • 70. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Cron wp schedule event wp schedule single event wp unschedule event wp next scheduled Vinicius Massuchetto Plugins no WordPress
  • 71. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ´ Classes Uteis SimplePie PHPMailer Vinicius Massuchetto Plugins no WordPress
  • 72. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade ¸˜ ´ Funcoes Uteis wp mail fetch feed human time diff Vinicius Massuchetto Plugins no WordPress
  • 73. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Liberando na comunidade Vinicius Massuchetto Plugins no WordPress
  • 74. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Liberando na comunidade ´ Requerer hospedagem no repositorio SVN oficial ¸˜ Escrever a documentacao ¸˜ Fazer uma imagem de apresentacao ¸˜ ¸˜ Avaliar requisicoes de suporte e gerenciar traducoes Vinicius Massuchetto Plugins no WordPress
  • 75. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade readme.txt de um plugin === Plugin Name === == Description == == Installation == == Frequently Asked Questions == == Screenshots == == Changelog == == Arbitrary section == Vinicius Massuchetto Plugins no WordPress
  • 76. Estrutura ¸˜ Introducao Interfaces ˜ Padroes Scripts e Estilos Desenvolvimento Ferramentas ¸˜ Consideracoes Finais Liberando na Comunidade Vinicius Massuchetto Plugins no WordPress
  • 77. ¸˜ Introducao ˜ Padroes Desenvolvimento ¸˜ Consideracoes Finais ¸˜ Consideracoes Finais Interfaces altamente flex´veis ı Conjunto de ferramentas amplo e dispon´vel ı ´ ` ¸˜ Facil acesso as informacoes pelo desenvolvedor ˜ ˜ Nao tem desculpa para nao codificar e suportar um plugin com qualidade Vinicius Massuchetto Plugins no WordPress
  • 78. ¸˜ Introducao ˜ Padroes Desenvolvimento ¸˜ Consideracoes Finais Vinicius Massuchetto Plugins no WordPress
  • 79. ¸˜ Introducao ˜ Padroes Desenvolvimento ¸˜ Consideracoes Finais ˆ Referencias Codex: Writing a Plugins http://codex.wordpress.org/Writing_a_Plugin WordPress Answers http://wordpress.stackexchange.com/questions/715/ objective-best-practices-for-plugin-development Vinicius Massuchetto Plugins no WordPress