79
Introduc ¸˜ ao Padr ˜ oes Desenvolvimento Considerac ¸˜ oes Finais Plugins no WordPress Fazendo o Neg´ ocio Direito Vinicius Massuchetto Campus Party Brasil 2013 Fevereiro de 2013 Vinicius Massuchetto Plugins no WordPress

Plugins no WordPress: Fazendo o Negócio Direito

Embed Size (px)

DESCRIPTION

Apresentação de palestra no WordCamp São Paulo 2012

Citation preview

Page 1: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Plugins no WordPressFazendo o Negocio Direito

Vinicius Massuchetto

Campus Party Brasil 2013

Fevereiro de 2013

Vinicius Massuchetto Plugins no WordPress

Page 2: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando 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

Page 3: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Sobre a Palestra

Motivacao, dificuldades e vantagens dos metodosPadroes de desenvolvimento no WordPressEstrutura de codigoInterfaces com o WordPressFerramentas uteis ja presentes no WordPress

Vinicius Massuchetto Plugins no WordPress

Page 4: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Motivacao

Vinicius Massuchetto Plugins no WordPress

Page 5: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Motivos para se criar um plugin

Funcionalidade inexistenteDiferente implementacao de uma funcionalidade existenteCodigos de tema portaveisImplementacoes modulares para clientesForks para ajustes e extensoes de plugins existentes

Vinicius Massuchetto Plugins no WordPress

Page 6: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Perguntas

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

Vinicius Massuchetto Plugins no WordPress

Page 7: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Dificuldades em se escrever um plugin

PHP X WordPressCultura de leitura de documentacao e inspecao de codigoBarreira de idioma

Vinicius Massuchetto Plugins no WordPress

Page 8: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Vantagens de se seguir algumas boas praticas

Codigo legıvelPadronizacao de estruturasMelhor aprendizado de outros desenvolvedoresMelhor manutencao do codigoExtensibilidadeDistributividade na comunidade do software livre

Vinicius Massuchetto Plugins no WordPress

Page 9: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Pensando Em Um Plugin

Definicao de escopo e pesquisa de funcionalidadesSe parecer redundante, perguntar e descrever a ideia emlistas e forunsEscolha de nome unico e relevanteAvaliacao do uso de outras tecnologias e frameworks

Vinicius Massuchetto Plugins no WordPress

Page 10: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Vinicius Massuchetto Plugins no WordPress

Page 11: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Primeiro Padrao

Vinicius Massuchetto Plugins no WordPress

Page 12: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Arquivos

Nomear o diretorio e os arquivos coerentementeIncluir somente arquivos necessarios e sob demanda nocodigoPermitir que o diretorio do plugin mude usando funcoescomo:

plugins url

plugin dir url

plugin dir path

Vinicius Massuchetto Plugins no WordPress

Page 13: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes 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

Page 14: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Inclusao Condicional

if ( is_admin() ){

/* interface administrativa */

add_action ...

add_filter ...

} else {

/* frontend */

add_action ...

add_filter ...

}

Vinicius Massuchetto Plugins no WordPress

Page 15: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Padroes de Codigo

Ater-se aos padroes recomendados para codigo edocumentacaoNomear as estruturas e funcoes com um identificadorunicoClareza e melhor do que praticidade

Vinicius Massuchetto Plugins no WordPress

Page 16: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Tag PHP

Errado

<? /* code */ ?>

<?=$var?>

<% /* code */ %>

Vinicius Massuchetto Plugins no WordPress

Page 17: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Tag PHP

Certo

<?php /* code */ ?>

<?php echo $var; ?>

Vinicius Massuchetto Plugins no WordPress

Page 18: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Chaves

Errado

if(condition)

{

action1();

action2();

}

else

{

action3();

action4();

}

Vinicius Massuchetto Plugins no WordPress

Page 19: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Chaves

Certo

if ( condition ) {

action1();

action2();

} else {

action3();

action4();

}

Vinicius Massuchetto Plugins no WordPress

Page 20: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Funcoes

Errado

function some_function($param1=’foo’, $param2=’bar’) {

/* code */

}

class SomeClass {

/* code */

}

Vinicius Massuchetto Plugins no WordPress

Page 21: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Funcoes

Certo

function some_function( $param1 = ’foo’, $param2 = ’bar’ ) {

/* code */

}

class Some_Class {

/* code */

}

Vinicius Massuchetto Plugins no WordPress

Page 22: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Vetores

Errado

$x = $foo[$bar];

$x = $foo[ ’bar’ ];

Vinicius Massuchetto Plugins no WordPress

Page 23: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Vetores

Certo

$x = $foo[ $bar ];

$x = $foo[’bar’];

Vinicius Massuchetto Plugins no WordPress

Page 24: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Padroes de SQL

Evitar escrever consultasUtilizar filtros para a WP QueryEscrever as palavras SQL em caixa altaValidar os tipos de dados antes de utiliza-losUtilizar a wpdbSe precisar criar tabelas no banco, use $wpdb->prefix

Vinicius Massuchetto Plugins no WordPress

Page 25: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes 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

Page 26: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes 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

Page 27: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Vinicius Massuchetto Plugins no WordPress

Page 28: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Debug

Vinicius Massuchetto Plugins no WordPress

Page 29: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 30: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 31: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 32: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 33: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Vantagens da Orientacao a Objetos em Plugins

Organiza o codigoMelhora a extensibilidadeReduz o impacto no escopo global do PHPAjuda a nao introduzir variaveis globais

Vinicius Massuchetto Plugins no WordPress

Page 34: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Ativacao

register activation hook

Criacao de opcoes padraoCriacao de tabelasExibicao de avisos para o usuario configurar o plugin

Vinicius Massuchetto Plugins no WordPress

Page 35: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Desativacao

register deactivation hook

Em geral nao deve causar nenhuma perda de dadosDesabilitar plugins dependentes

Vinicius Massuchetto Plugins no WordPress

Page 36: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Desinstalacao

register uninstall hook

Nao deve deixar nenhum dado residual no WordPressRemove opcoes do usuarioRemove tabelasAvisa o usuario antes de remover qualquer dado(admin notices)

Vinicius Massuchetto Plugins no WordPress

Page 37: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Inicializacao

* init()

Geralmente atraves de um procedimento inicializador

Vinicius Massuchetto Plugins no WordPress

Page 38: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 39: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 40: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Consultas

Sempre prefira a WP Query em loops estruturados:have posts

the post

next post

rewrind posts

Vinicius Massuchetto Plugins no WordPress

Page 41: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 42: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Filtros de Consulta

posts where

posts join

posts orderby

posts groupby

Vinicius Massuchetto Plugins no WordPress

Page 43: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Banco de dados

Em ultimo caso, use a wpdb:query

prepare

insert

update

get var

Vinicius Massuchetto Plugins no WordPress

Page 44: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 45: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Uso de Acoes e Filtros

Base da construcao de plugins no WordPressCertificar-se de agendar os eventos e tratar os dadosadequadamente

Vinicius Massuchetto Plugins no WordPress

Page 46: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Implementacao de Acoes e Filtros

Oferecer extensibilidade aos dados geradosPossibilitar a insercao de novos procedimentos a medidaque eventos relevantes acontecem

Vinicius Massuchetto Plugins no WordPress

Page 47: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 48: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 49: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 50: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Adicionando scripts

ErradoNo tema:

<html>

<head>

...

<script type="text/javascript" src="script.js" />

</head>

Vinicius Massuchetto Plugins no WordPress

Page 51: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 52: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 53: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 54: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 55: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 56: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Vinicius Massuchetto Plugins no WordPress

Page 57: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Internacionalizacao

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

Vinicius Massuchetto Plugins no WordPress

Page 58: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 59: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 60: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Tratamento de Erros

Vinicius Massuchetto Plugins no WordPress

Page 61: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Tratamento de erros

Instanciacoes da WP ErrorVerificacao com is wp errorUtilizar a wp die para morrer elegantemente

Vinicius Massuchetto Plugins no WordPress

Page 62: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 63: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando 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

Page 64: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Classes e Funcoes Uteis

Vinicius Massuchetto Plugins no WordPress

Page 65: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Manipulacao de Dados

wp parse args

wp list filter

Vinicius Massuchetto Plugins no WordPress

Page 66: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Formatacao

is email

remove accents

sanitize title

sanitize email

seems utf8

zeroise

wptexturize

Vinicius Massuchetto Plugins no WordPress

Page 67: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Transients API

set transient

get transient

delete transient

Vinicius Massuchetto Plugins no WordPress

Page 68: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

HTTP API

wp remote get

wp remote retrieve body

wp remote retrieve headers

Vinicius Massuchetto Plugins no WordPress

Page 69: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Object Cache

wp cache add

wp cache set

wp cache get

wp cache delete

wp cache flush

Vinicius Massuchetto Plugins no WordPress

Page 70: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Cron

wp schedule event

wp schedule single event

wp unschedule event

wp next scheduled

Vinicius Massuchetto Plugins no WordPress

Page 71: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Classes Uteis

SimplePie

PHPMailer

Vinicius Massuchetto Plugins no WordPress

Page 72: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Funcoes Uteis

wp mail

fetch feed

human time diff

Vinicius Massuchetto Plugins no WordPress

Page 73: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Liberando na comunidade

Vinicius Massuchetto Plugins no WordPress

Page 74: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Liberando na comunidade

Requerer hospedagem no repositorio SVN oficialEscrever a documentacaoFazer uma imagem de apresentacaoAvaliar requisicoes de suporte e gerenciar traducoes

Vinicius Massuchetto Plugins no WordPress

Page 75: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

readme.txt de um plugin

=== Plugin Name ===

== Description ==

== Installation ==

== Frequently Asked Questions ==

== Screenshots ==

== Changelog ==

== Arbitrary section ==

Vinicius Massuchetto Plugins no WordPress

Page 76: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Vinicius Massuchetto Plugins no WordPress

Page 77: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Consideracoes Finais

Interfaces altamente flexıveisConjunto de ferramentas amplo e disponıvelFacil acesso as informacoes pelo desenvolvedorNao tem desculpa para nao codificar e suportar um plugincom qualidade

Vinicius Massuchetto Plugins no WordPress

Page 78: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Vinicius Massuchetto Plugins no WordPress

Page 79: Plugins no WordPress: Fazendo o Negócio Direito

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Referencias

Codex: Writing a Pluginshttp://codex.wordpress.org/Writing_a_Plugin

WordPress Answershttp://wordpress.stackexchange.com/questions/715/

objective-best-practices-for-plugin-development

Vinicius Massuchetto Plugins no WordPress