SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Como criar um plugin para
      WordPress
      Por @leandrovieira
O que é um plugin WordPress?

Um plugin WordPress é um programa, um conjunto de uma ou
várias funções, escrito em PHP e adiciona recursos ou
serviços específicos ao WordPress através de sua API.
Devo realmente criar um plugin
WordPress?
  Consulte o diretório de plugins WordPress em http:
  //wordpress.org/extend/plugins/
  Há mais de 5 mil publicados;
  28 de Janeiro declarado como o “Thank a Plugin
  Developer” quando o diretório atingiu a marca de 4 mil
  plugins plublicados;
   Alguma função nativa do WordPress? Consulte http:
  //codex.wordpress.org/Function_Reference
  Posso adaptar um plugin para minha necessidade sabendo
  como criá-los.
O que você precisa para criar um
plugin WordPress?
  Um problema pra resolver;
  Ambiente de desenvolvimento em PHP (XAMPP);
  Conhecimentos em PHP;
  Conhecimentos na API de Plugin do WordPress;
  Arquivos de exemplo: http://leandrovieira.com/download/9
Estrutura de um plugin WordPress

 No mínimo um arquivo PHP;
 Se tiver vários arquivos armazenar num diretório;
 Nome do plugin: único e descritivo. Exemplo: CMS Brasil
 2009;
 Nome do arquivo PHP: cms-brasil-2009.php;
 cmsbrasil2009.php
 Nome do diretório: cms-brasil-2009/cms-brasil-2009.php;
 cmsbrasil2009/cmsbrasil2009.php
 Armazenado em /wp-content/plugins/
  Se for hospedar o plugin no diretório do WorPress.org é
 necessário criar o arquivo readme.txt;
  Licença de uso do plugin GPL ou alguma compatível;
  Cabeçalho do plugin.
Cabeçalho de um plugin WordPress

<?php
/*
Plugin Name: CMS Brasil 2009
Plugin URI: http://cmsbrasil2009.com/
Description: Conferência internacional de CMS
Author: iMasters
Version: 1.0
Author URI: http://imasters.uol.com.br
*/
?>
Como instalar um plugin WordPress

 Via FTP;
 Upload do plugin em formato ZIP (a partir da versão 2.7);
 Baixar do diretório de plugins do WordPress.org;
 Ativar o plugin desejado.
API de Plugin do WordPress

 Hooks (ganchos);
 Acrescentar funcionalidades sem editar o CORE do
 WordPress;
 Há dois tipos de hooks (ganchos):
    Actions (ações);
        São ganchos executados pelo WordPress em
        momentos específicos durante a execução ou
        quando algum evento ocorre.
    Filters (filtros)
        São ganchos executados pelo WordPress para
        modificar textos ou outros tipos antes de inserir no
        banco de dados ou exibir no navegador de internet.
Actions

Como registrar uma função para responder um evento do
WordPress

    No arquivo do plugin crie uma função PHP;
    Algumas ações recebem mais de um parâmetro. É
    possível definir quantos receber;
    Registre-a com o WordPress chamando a função
    add_action;
add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );
add_action ( 'publish_post', 'nome_funcao' );
Actions

Exemplo:

function cmsbrasil2009_url_after_login()
{
    global $redirect_to;
    if ( !isset( $_GET['redirect_to'] ) )
        $redirect_to = get_bloginfo( 'home' );
}
add_action( 'login_form', 'cmsbrasil2009_url_after_login' );
Filters

Como registrar uma função de filtro para tratar dados no
WordPress

    No arquivo do plugin crie uma função PHP para fazer o
    processo de filtragem;
    Alguns filtros recebem mais de um parâmetro. É possível
    definir quantos receber;
    Registre-a com o WordPress chamando a função
    add_filter.
add_filter ( 'hook_name', 'your_filter', [priority], [accepted_args] );
add_filter ( 'the_title', 'nome_funcao' );
Filters
function cmsbrasil2009_cms_title( $title )
{
    $cms = preg_match( "/(wordpress|joomla|drupal)/i", $title, $matches );
    $cms_name = strtolower( $matches[0] );
    switch( $cms_name ) :
        case 'wordpress' :
            return '<img src="' . WP_PLUGIN_URL . '/wordpress.jpg" />' .
$title;
        break;
        case 'joomla' :
            return '<img src="' . WP_PLUGIN_URL . '/joomla.png" />' . $title;
        break;
        case 'drupal' :
            return '<img src="' . WP_PLUGIN_URL . '/drupal.png" />' . $title;
        break;
        default :
            return '<img src="' . WP_PLUGIN_URL . '/imasters.gif" />' .
$title;
        break;
    endswitch;
}
add_filter( 'the_title', 'cmsbrasil2009_cms_title' );
Filters
function primeira( $title )
{
    return 'T1: ' . $title;
}
add_filter( 'the_title', 'primeira' );

function segunda( $title )
{
    return 'T2: ' . $title;
}
add_filter( 'the_title', 'segunda' );

Resultado: T2: T1: Título do post

function primeira( $title )
{
    return 'T1: ' . $title;
}
add_filter( 'the_title', 'primeira', 11 );

function segunda( $title )
{
    return 'T2: ' . $title;
}
add_filter( 'the_title', 'segunda', 10 );
Resultado: T1: T2: Título do post
Removendo Actions e Filters

Da mesma forma que podemos incluir ações para responder
eventos do WordPress e filtros para tratar dados, podemos
também desabilitar um desses recursos nativos do WordPress
ou de algum outro plugin.
remove_action( 'nome_do_gancho', 'nome_da_funcao' );
remove_filter( 'nome_do_gancho', 'nome_da_funcao' );


Atente-se ao fato que para remover um gancho criado usando
prioridade diferente de 10, se faz necessário informa-la ao
chamar a função remove_action.
remove_filter( 'nome_do_gancho', 'nome_da_funcao', 11 );
Funções "Pluggable"
Além dos ganchos (actions e filters) existem outras maneiras
de modificar o comportamento do WordPress:
sobreescrevendo suas funções.

As funções que o WordPress permite serem sobreescritas são
chamadas de Pluggable Functions e são definidas no seguinte
arquivo: wp-includes/pluggable.php. Essas funções são
carregadas somente após o carregamento de todos plugins e
somente se elas não tiverem sido reescritas.

if ( !function_exists('is_user_logged_in') ) :
function is_user_logged_in() {
    ...
}
endif;
Templates tags (tags de templates)

Definir uma tag de template é simples. Escreva uma função
PHP em seu plugin e explique aos usuários como e onde
chama-las.

É boa prática sempre verificar se a função ou classe existe
antes de chama-la.
<?php if ( function_exists( 'nome_da_funcao' ) ) nome_da_funcao(); ?>


<?php if ( class_exists( 'NomeDaClasse' ) ) NomeDaClasse::metodo(); ?>
Criando menus e páginas
administrativas
Para criar páginas administrativas precisamos de três coisas:

    Criar uma função contendo os códigos utilizados para criar
    os menus;
        add_menu_page;
        add_submenu_page;
        add_options_page;
        ...
    Registrar tal função usando o gancho "admin_menu";
     Criar o HTML da página a ser exibida quando o menu for
    clicado.

* Os menus são criados "on the fly". Eles serão recriados a cada acesso a uma
das páginas administrativa.
Criando menus e páginas
administrativas
function cmsbrasil2009_menu()
{
    add_menu_page( 'Inscrição: iMasters CMS Brasil 2009', 'Inscrição', 10,
'cmsbrasil2009/inscricao.php' );

    add_submenu_page( 'cmsbrasil2009/inscricao.php', 'Inscrições pendentes',
'Pendentes', 10, 'cmsbrasil2009/pendentes.php' );

}
add_action( 'admin_menu', 'cmsbrasil2009_menu' );
Armazenamento de dados

 Para pequena quantidade de dados ou dados estáticos, use
 o mecanismo de opções do WordPress;
 Para informações referente a posts, use Post meta;
 Para informações referente a usuários, use User meta;
 Para grande quantidade de dados, crie suas tabelas de
 banco de dados.
Options

O WordPress tem um mecanismo para salvar, atualizar, excluir
e resgatar dados nomeado como opções. Os valores dessas
opções podem ser strings, arrays ou objetos PHP. Esses
dados serão serializados ou convertidos para string antes de
serem armazenados e deserializados quando resgatados.

As opções devem ter nomes únicos para evitar conflitos com o
WordPress e outros plugins.
Options
Funções para trabalhar com as opções do WordPress

   add_option;
      add_option($name, $value, $deprecated, $autoload);
   get_option;
      get_option($option);
   update_option;
      update_option($option_name, $newvalue);
   delete_option;
       delete_option($name);


1. A função update_option verifica se a opção existe antes de
   atuliza-la, se não existir ela será criada;
2. deprecated não é usado;
3. autoload é para a opção ser carregada pela função
   get_alloptions.
Options
Página de opções no padrão WordPress
<div class="wrap">
     <h2>Exemplo de opções</h2>
     <form method="post" action="options.php">
        <?php wp_nonce_field('update-options'); ?>
        <table class="form-table">
            <tr valign="top">
                <th scope="row">Nome da opção</th>
                <td><input type="text" name="cmsbrasil2009_opcao" value="<?php
echo get_option('cmsbrasil2009_opcao'); ?>" /></td>
            </tr>
        </table>
        <input type="hidden" name="action" value="update" />
        <input type="hidden" name="page_options" value="cmsbrasil2009_opcao"
/>
        <p class="submit">
        <input type="submit" class="button-primary" value="Salvar" />
Trabalhando com banco de dados

WordPress fornece uma classe de funções para toda
manipulação em banco de dados. A classe é baseada na
ezSQL escrita e mantida por Justin Vincent e se chama wpdb.

A classe está disponível no objeto global $wpdb. Ele pode ser
usada para trabalhar com todas tabelas do WordPress, as
padrões e as criadas por plugins.

Quando for usar dentro de funções lembre-se de usar o global.
O objeto acessa quantas tabelas existirem, mas somente um
banco de dados, o do WordPress.

http://codex.wordpress.org/Function_Reference/wpdb_Class
Trabalhando com banco de dados
Funções
   query;
   get_var;
   get_row;
   get_col;
   get_results;
   insert;
   update;
   prepare;
   show_errors();
   hide_errors();
   print_error();
   get_col_info();
   flush;
Trabalhando com banco de dados
Variáveis
   show_errors;
   num_queries;
   last_query;
   queries;
   last_results;
   col_info;
   insert_id.
Melhores práticas

  Prefixo em nome de funções e variáveis; evite conflito;
  Considerações ao instalar e desinstalar plugins;
  $wpdb->prefix sempre;
  $wpdb->prepare sempre;
  Dê atenção a perfomance de suas consultas ao banco de
  dados; evite SELECT * FROM tabela se pode usar SELECT
  ID FROM tabela;
  define('WP_DEBUG', true); em wp-config.php
  Versão do WordPress;
  Versão do PHP;
  Use funções nativas do WordPress sempre que possível;
  Comente seus códigos;
Obrigado!

leandrovieira.com
    apiki.com
  @leandrovieira

Contenu connexe

Tendances

Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Thyago Maia
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Thyago Maia
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + FirebaseBruno Catão
 
Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend frameworkMarcos Oliveira
 
Meu primeiro tema de WordPress
Meu primeiro tema de WordPressMeu primeiro tema de WordPress
Meu primeiro tema de WordPressLuan Muniz
 
Introducao cms-wordpress
Introducao cms-wordpressIntroducao cms-wordpress
Introducao cms-wordpressMateus Neves
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Apresentando o Yii Framework
Apresentando o Yii FrameworkApresentando o Yii Framework
Apresentando o Yii Frameworkangellicacardozo
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao DjangoVinicius Mendes
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesDaniel Brandão
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniterRaniere de Lima
 
Iniciando com o_zend_framework
Iniciando com o_zend_frameworkIniciando com o_zend_framework
Iniciando com o_zend_frameworkMilton Rodrigues
 
Slide 04 adicionando usuários e conhecendo o auto load
Slide 04   adicionando usuários e conhecendo o auto loadSlide 04   adicionando usuários e conhecendo o auto load
Slide 04 adicionando usuários e conhecendo o auto loadRaniere de Lima
 
Oficina Criando seu primeiro tema do zero
Oficina Criando seu primeiro tema do zeroOficina Criando seu primeiro tema do zero
Oficina Criando seu primeiro tema do zeroFellyph Cintra
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDaniel Paz
 

Tendances (20)

Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 4 - 2019.1
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend framework
 
Meu primeiro tema de WordPress
Meu primeiro tema de WordPressMeu primeiro tema de WordPress
Meu primeiro tema de WordPress
 
Introducao cms-wordpress
Introducao cms-wordpressIntroducao cms-wordpress
Introducao cms-wordpress
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Apresentando o Yii Framework
Apresentando o Yii FrameworkApresentando o Yii Framework
Apresentando o Yii Framework
 
Aula30 trevisan
Aula30 trevisanAula30 trevisan
Aula30 trevisan
 
Upload de arquivos - Laravel
Upload de arquivos - LaravelUpload de arquivos - Laravel
Upload de arquivos - Laravel
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao Django
 
PHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e SessoesPHP Aula 05 - E-mails, Cookies e Sessoes
PHP Aula 05 - E-mails, Cookies e Sessoes
 
Slide 01 introdução ao php e ao code igniter
Slide 01   introdução ao php e ao code igniterSlide 01   introdução ao php e ao code igniter
Slide 01 introdução ao php e ao code igniter
 
Iniciando com o_zend_framework
Iniciando com o_zend_frameworkIniciando com o_zend_framework
Iniciando com o_zend_framework
 
Slide 04 adicionando usuários e conhecendo o auto load
Slide 04   adicionando usuários e conhecendo o auto loadSlide 04   adicionando usuários e conhecendo o auto load
Slide 04 adicionando usuários e conhecendo o auto load
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Oficina Criando seu primeiro tema do zero
Oficina Criando seu primeiro tema do zeroOficina Criando seu primeiro tema do zero
Oficina Criando seu primeiro tema do zero
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi Builder
 
Tutorial +login+mvc
Tutorial +login+mvcTutorial +login+mvc
Tutorial +login+mvc
 

Similaire à Como criar plugins para WordPress

Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Leo Baiano
 
WordPress além dos blogs #fisl14
WordPress além dos blogs #fisl14WordPress além dos blogs #fisl14
WordPress além dos blogs #fisl14Tatiane Pires
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03Maurício Linhares
 
Criando Sites Com CMS
Criando Sites Com CMSCriando Sites Com CMS
Criando Sites Com CMSClaudio Toldo
 
Apresentação formação web - up marketing digital - módulo ii - 2º fds
Apresentação   formação web - up marketing digital - módulo ii - 2º fdsApresentação   formação web - up marketing digital - módulo ii - 2º fds
Apresentação formação web - up marketing digital - módulo ii - 2º fdsRangel Javier
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1Thyago Maia
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Maurício Linhares
 
Wordpress e suas funções
Wordpress e suas funçõesWordpress e suas funções
Wordpress e suas funçõesDaniel Marcos
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppetDaniel Sobral
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Erisvaldo Junior
 
Boas Práticas de programação WordPress
Boas Práticas de programação WordPressBoas Práticas de programação WordPress
Boas Práticas de programação WordPressThiago Mendes
 
Hooks no WordPress
Hooks no WordPressHooks no WordPress
Hooks no WordPressFelipe Elia
 
Turbinando o WordPress com Meta Boxes
Turbinando o WordPress com Meta BoxesTurbinando o WordPress com Meta Boxes
Turbinando o WordPress com Meta BoxesWordPress Floripa
 
Workshop Web e WordPress
Workshop Web e WordPressWorkshop Web e WordPress
Workshop Web e WordPressHaste Design
 
Sweet Child O' Themes
Sweet Child O' ThemesSweet Child O' Themes
Sweet Child O' ThemesBreno Alves
 

Similaire à Como criar plugins para WordPress (20)

Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
Coisas que eu gostaria de saber antes de começar a desenvolver temas e plugin...
 
WordPress além dos blogs #fisl14
WordPress além dos blogs #fisl14WordPress além dos blogs #fisl14
WordPress além dos blogs #fisl14
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03Curso de Ruby on Rails - Aula 03
Curso de Ruby on Rails - Aula 03
 
Criando Sites Com CMS
Criando Sites Com CMSCriando Sites Com CMS
Criando Sites Com CMS
 
Apresentação formação web - up marketing digital - módulo ii - 2º fds
Apresentação   formação web - up marketing digital - módulo ii - 2º fdsApresentação   formação web - up marketing digital - módulo ii - 2º fds
Apresentação formação web - up marketing digital - módulo ii - 2º fds
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 3 - 2019.1
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04
 
Wordpress e suas funções
Wordpress e suas funçõesWordpress e suas funções
Wordpress e suas funções
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
 
Boas Práticas de programação WordPress
Boas Práticas de programação WordPressBoas Práticas de programação WordPress
Boas Práticas de programação WordPress
 
Hooks no WordPress
Hooks no WordPressHooks no WordPress
Hooks no WordPress
 
Implementação de
Implementação de Implementação de
Implementação de
 
Turbinando o WordPress com Meta Boxes
Turbinando o WordPress com Meta BoxesTurbinando o WordPress com Meta Boxes
Turbinando o WordPress com Meta Boxes
 
Workshop Web e WordPress
Workshop Web e WordPressWorkshop Web e WordPress
Workshop Web e WordPress
 
Sweet Child O' Themes
Sweet Child O' ThemesSweet Child O' Themes
Sweet Child O' Themes
 

Plus de Leandrinho Vieira

As vantagens e os desafios na implementação do Mobile First
As vantagens e os desafios na implementação do Mobile FirstAs vantagens e os desafios na implementação do Mobile First
As vantagens e os desafios na implementação do Mobile FirstLeandrinho Vieira
 
Os desafios da Gestão em Projetos Digitais
Os desafios da Gestão em Projetos DigitaisOs desafios da Gestão em Projetos Digitais
Os desafios da Gestão em Projetos DigitaisLeandrinho Vieira
 
WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.
WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.
WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.Leandrinho Vieira
 
O profissional de comunicação que você precisa ser e ainda não te contara...
O profissional de comunicação que você precisa ser e ainda não te contara...O profissional de comunicação que você precisa ser e ainda não te contara...
O profissional de comunicação que você precisa ser e ainda não te contara...Leandrinho Vieira
 
Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...
Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...
Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...Leandrinho Vieira
 
Seu e-commerce deve considerar blog como uma ferramenta de vendas
Seu e-commerce deve considerar blog como uma ferramenta de vendasSeu e-commerce deve considerar blog como uma ferramenta de vendas
Seu e-commerce deve considerar blog como uma ferramenta de vendasLeandrinho Vieira
 
Repita 7 vezes: o WordPress é seguro
Repita 7 vezes: o WordPress é seguroRepita 7 vezes: o WordPress é seguro
Repita 7 vezes: o WordPress é seguroLeandrinho Vieira
 
O WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MG
O WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MGO WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MG
O WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MGLeandrinho Vieira
 
O WordPress é seguro. Inseguro é você. Edição Vitória/ES
O WordPress é seguro. Inseguro é você. Edição Vitória/ESO WordPress é seguro. Inseguro é você. Edição Vitória/ES
O WordPress é seguro. Inseguro é você. Edição Vitória/ESLeandrinho Vieira
 
WordPress como aliado do desenvolvedor front-end
WordPress como aliado do desenvolvedor front-endWordPress como aliado do desenvolvedor front-end
WordPress como aliado do desenvolvedor front-endLeandrinho Vieira
 
Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)
Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)
Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)Leandrinho Vieira
 
Desenvolvimento Do jQuery Light Box Plugin ao vivo
Desenvolvimento Do jQuery Light Box Plugin ao vivoDesenvolvimento Do jQuery Light Box Plugin ao vivo
Desenvolvimento Do jQuery Light Box Plugin ao vivoLeandrinho Vieira
 

Plus de Leandrinho Vieira (13)

As vantagens e os desafios na implementação do Mobile First
As vantagens e os desafios na implementação do Mobile FirstAs vantagens e os desafios na implementação do Mobile First
As vantagens e os desafios na implementação do Mobile First
 
Os desafios da Gestão em Projetos Digitais
Os desafios da Gestão em Projetos DigitaisOs desafios da Gestão em Projetos Digitais
Os desafios da Gestão em Projetos Digitais
 
WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.
WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.
WordCamp Porto Alegre - O WordPress é seguro. Inseguro é você.
 
O profissional de comunicação que você precisa ser e ainda não te contara...
O profissional de comunicação que você precisa ser e ainda não te contara...O profissional de comunicação que você precisa ser e ainda não te contara...
O profissional de comunicação que você precisa ser e ainda não te contara...
 
Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...
Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...
Como o trabalho dos desenvolvedores impacta os negócios e o marketing digita...
 
Mobilize-se com WordPress
Mobilize-se com WordPressMobilize-se com WordPress
Mobilize-se com WordPress
 
Seu e-commerce deve considerar blog como uma ferramenta de vendas
Seu e-commerce deve considerar blog como uma ferramenta de vendasSeu e-commerce deve considerar blog como uma ferramenta de vendas
Seu e-commerce deve considerar blog como uma ferramenta de vendas
 
Repita 7 vezes: o WordPress é seguro
Repita 7 vezes: o WordPress é seguroRepita 7 vezes: o WordPress é seguro
Repita 7 vezes: o WordPress é seguro
 
O WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MG
O WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MGO WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MG
O WordPress é seguro. Inseguro é você. Edição Belo Horizonte/MG
 
O WordPress é seguro. Inseguro é você. Edição Vitória/ES
O WordPress é seguro. Inseguro é você. Edição Vitória/ESO WordPress é seguro. Inseguro é você. Edição Vitória/ES
O WordPress é seguro. Inseguro é você. Edição Vitória/ES
 
WordPress como aliado do desenvolvedor front-end
WordPress como aliado do desenvolvedor front-endWordPress como aliado do desenvolvedor front-end
WordPress como aliado do desenvolvedor front-end
 
Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)
Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)
Processo completo de desenvolvimento de um tema (Do Photoshop ao PHP)
 
Desenvolvimento Do jQuery Light Box Plugin ao vivo
Desenvolvimento Do jQuery Light Box Plugin ao vivoDesenvolvimento Do jQuery Light Box Plugin ao vivo
Desenvolvimento Do jQuery Light Box Plugin ao vivo
 

Como criar plugins para WordPress

  • 1. Como criar um plugin para WordPress Por @leandrovieira
  • 2. O que é um plugin WordPress? Um plugin WordPress é um programa, um conjunto de uma ou várias funções, escrito em PHP e adiciona recursos ou serviços específicos ao WordPress através de sua API.
  • 3. Devo realmente criar um plugin WordPress? Consulte o diretório de plugins WordPress em http: //wordpress.org/extend/plugins/ Há mais de 5 mil publicados; 28 de Janeiro declarado como o “Thank a Plugin Developer” quando o diretório atingiu a marca de 4 mil plugins plublicados; Alguma função nativa do WordPress? Consulte http: //codex.wordpress.org/Function_Reference Posso adaptar um plugin para minha necessidade sabendo como criá-los.
  • 4. O que você precisa para criar um plugin WordPress? Um problema pra resolver; Ambiente de desenvolvimento em PHP (XAMPP); Conhecimentos em PHP; Conhecimentos na API de Plugin do WordPress; Arquivos de exemplo: http://leandrovieira.com/download/9
  • 5. Estrutura de um plugin WordPress No mínimo um arquivo PHP; Se tiver vários arquivos armazenar num diretório; Nome do plugin: único e descritivo. Exemplo: CMS Brasil 2009; Nome do arquivo PHP: cms-brasil-2009.php; cmsbrasil2009.php Nome do diretório: cms-brasil-2009/cms-brasil-2009.php; cmsbrasil2009/cmsbrasil2009.php Armazenado em /wp-content/plugins/ Se for hospedar o plugin no diretório do WorPress.org é necessário criar o arquivo readme.txt; Licença de uso do plugin GPL ou alguma compatível; Cabeçalho do plugin.
  • 6. Cabeçalho de um plugin WordPress <?php /* Plugin Name: CMS Brasil 2009 Plugin URI: http://cmsbrasil2009.com/ Description: Conferência internacional de CMS Author: iMasters Version: 1.0 Author URI: http://imasters.uol.com.br */ ?>
  • 7. Como instalar um plugin WordPress Via FTP; Upload do plugin em formato ZIP (a partir da versão 2.7); Baixar do diretório de plugins do WordPress.org; Ativar o plugin desejado.
  • 8. API de Plugin do WordPress Hooks (ganchos); Acrescentar funcionalidades sem editar o CORE do WordPress; Há dois tipos de hooks (ganchos): Actions (ações); São ganchos executados pelo WordPress em momentos específicos durante a execução ou quando algum evento ocorre. Filters (filtros) São ganchos executados pelo WordPress para modificar textos ou outros tipos antes de inserir no banco de dados ou exibir no navegador de internet.
  • 9. Actions Como registrar uma função para responder um evento do WordPress No arquivo do plugin crie uma função PHP; Algumas ações recebem mais de um parâmetro. É possível definir quantos receber; Registre-a com o WordPress chamando a função add_action; add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] ); add_action ( 'publish_post', 'nome_funcao' );
  • 10. Actions Exemplo: function cmsbrasil2009_url_after_login() { global $redirect_to; if ( !isset( $_GET['redirect_to'] ) ) $redirect_to = get_bloginfo( 'home' ); } add_action( 'login_form', 'cmsbrasil2009_url_after_login' );
  • 11. Filters Como registrar uma função de filtro para tratar dados no WordPress No arquivo do plugin crie uma função PHP para fazer o processo de filtragem; Alguns filtros recebem mais de um parâmetro. É possível definir quantos receber; Registre-a com o WordPress chamando a função add_filter. add_filter ( 'hook_name', 'your_filter', [priority], [accepted_args] ); add_filter ( 'the_title', 'nome_funcao' );
  • 12. Filters function cmsbrasil2009_cms_title( $title ) { $cms = preg_match( "/(wordpress|joomla|drupal)/i", $title, $matches ); $cms_name = strtolower( $matches[0] ); switch( $cms_name ) : case 'wordpress' : return '<img src="' . WP_PLUGIN_URL . '/wordpress.jpg" />' . $title; break; case 'joomla' : return '<img src="' . WP_PLUGIN_URL . '/joomla.png" />' . $title; break; case 'drupal' : return '<img src="' . WP_PLUGIN_URL . '/drupal.png" />' . $title; break; default : return '<img src="' . WP_PLUGIN_URL . '/imasters.gif" />' . $title; break; endswitch; } add_filter( 'the_title', 'cmsbrasil2009_cms_title' );
  • 13. Filters function primeira( $title ) { return 'T1: ' . $title; } add_filter( 'the_title', 'primeira' ); function segunda( $title ) { return 'T2: ' . $title; } add_filter( 'the_title', 'segunda' ); Resultado: T2: T1: Título do post function primeira( $title ) { return 'T1: ' . $title; } add_filter( 'the_title', 'primeira', 11 ); function segunda( $title ) { return 'T2: ' . $title; } add_filter( 'the_title', 'segunda', 10 ); Resultado: T1: T2: Título do post
  • 14. Removendo Actions e Filters Da mesma forma que podemos incluir ações para responder eventos do WordPress e filtros para tratar dados, podemos também desabilitar um desses recursos nativos do WordPress ou de algum outro plugin. remove_action( 'nome_do_gancho', 'nome_da_funcao' ); remove_filter( 'nome_do_gancho', 'nome_da_funcao' ); Atente-se ao fato que para remover um gancho criado usando prioridade diferente de 10, se faz necessário informa-la ao chamar a função remove_action. remove_filter( 'nome_do_gancho', 'nome_da_funcao', 11 );
  • 15. Funções "Pluggable" Além dos ganchos (actions e filters) existem outras maneiras de modificar o comportamento do WordPress: sobreescrevendo suas funções. As funções que o WordPress permite serem sobreescritas são chamadas de Pluggable Functions e são definidas no seguinte arquivo: wp-includes/pluggable.php. Essas funções são carregadas somente após o carregamento de todos plugins e somente se elas não tiverem sido reescritas. if ( !function_exists('is_user_logged_in') ) : function is_user_logged_in() { ... } endif;
  • 16. Templates tags (tags de templates) Definir uma tag de template é simples. Escreva uma função PHP em seu plugin e explique aos usuários como e onde chama-las. É boa prática sempre verificar se a função ou classe existe antes de chama-la. <?php if ( function_exists( 'nome_da_funcao' ) ) nome_da_funcao(); ?> <?php if ( class_exists( 'NomeDaClasse' ) ) NomeDaClasse::metodo(); ?>
  • 17. Criando menus e páginas administrativas Para criar páginas administrativas precisamos de três coisas: Criar uma função contendo os códigos utilizados para criar os menus; add_menu_page; add_submenu_page; add_options_page; ... Registrar tal função usando o gancho "admin_menu"; Criar o HTML da página a ser exibida quando o menu for clicado. * Os menus são criados "on the fly". Eles serão recriados a cada acesso a uma das páginas administrativa.
  • 18. Criando menus e páginas administrativas function cmsbrasil2009_menu() { add_menu_page( 'Inscrição: iMasters CMS Brasil 2009', 'Inscrição', 10, 'cmsbrasil2009/inscricao.php' ); add_submenu_page( 'cmsbrasil2009/inscricao.php', 'Inscrições pendentes', 'Pendentes', 10, 'cmsbrasil2009/pendentes.php' ); } add_action( 'admin_menu', 'cmsbrasil2009_menu' );
  • 19. Armazenamento de dados Para pequena quantidade de dados ou dados estáticos, use o mecanismo de opções do WordPress; Para informações referente a posts, use Post meta; Para informações referente a usuários, use User meta; Para grande quantidade de dados, crie suas tabelas de banco de dados.
  • 20. Options O WordPress tem um mecanismo para salvar, atualizar, excluir e resgatar dados nomeado como opções. Os valores dessas opções podem ser strings, arrays ou objetos PHP. Esses dados serão serializados ou convertidos para string antes de serem armazenados e deserializados quando resgatados. As opções devem ter nomes únicos para evitar conflitos com o WordPress e outros plugins.
  • 21. Options Funções para trabalhar com as opções do WordPress add_option; add_option($name, $value, $deprecated, $autoload); get_option; get_option($option); update_option; update_option($option_name, $newvalue); delete_option; delete_option($name); 1. A função update_option verifica se a opção existe antes de atuliza-la, se não existir ela será criada; 2. deprecated não é usado; 3. autoload é para a opção ser carregada pela função get_alloptions.
  • 22. Options Página de opções no padrão WordPress <div class="wrap"> <h2>Exemplo de opções</h2> <form method="post" action="options.php"> <?php wp_nonce_field('update-options'); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Nome da opção</th> <td><input type="text" name="cmsbrasil2009_opcao" value="<?php echo get_option('cmsbrasil2009_opcao'); ?>" /></td> </tr> </table> <input type="hidden" name="action" value="update" /> <input type="hidden" name="page_options" value="cmsbrasil2009_opcao" /> <p class="submit"> <input type="submit" class="button-primary" value="Salvar" />
  • 23. Trabalhando com banco de dados WordPress fornece uma classe de funções para toda manipulação em banco de dados. A classe é baseada na ezSQL escrita e mantida por Justin Vincent e se chama wpdb. A classe está disponível no objeto global $wpdb. Ele pode ser usada para trabalhar com todas tabelas do WordPress, as padrões e as criadas por plugins. Quando for usar dentro de funções lembre-se de usar o global. O objeto acessa quantas tabelas existirem, mas somente um banco de dados, o do WordPress. http://codex.wordpress.org/Function_Reference/wpdb_Class
  • 24. Trabalhando com banco de dados Funções query; get_var; get_row; get_col; get_results; insert; update; prepare; show_errors(); hide_errors(); print_error(); get_col_info(); flush;
  • 25. Trabalhando com banco de dados Variáveis show_errors; num_queries; last_query; queries; last_results; col_info; insert_id.
  • 26. Melhores práticas Prefixo em nome de funções e variáveis; evite conflito; Considerações ao instalar e desinstalar plugins; $wpdb->prefix sempre; $wpdb->prepare sempre; Dê atenção a perfomance de suas consultas ao banco de dados; evite SELECT * FROM tabela se pode usar SELECT ID FROM tabela; define('WP_DEBUG', true); em wp-config.php Versão do WordPress; Versão do PHP; Use funções nativas do WordPress sempre que possível; Comente seus códigos;
  • 27. Obrigado! leandrovieira.com apiki.com @leandrovieira