Plugins no WordPress: Fazendo o Negócio Direito

Post on 06-Jun-2015

794 views 3 download

description

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

Transcript of 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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

ApresentacaoSobre a PalestraMotivacaoAvancando a Ideia

Motivacao

Vinicius Massuchetto Plugins no WordPress

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

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

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Primeiro Padrao

Vinicius Massuchetto Plugins no WordPress

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

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Tag PHP

Errado

<? /* code */ ?>

<?=$var?>

<% /* code */ %>

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Tag PHP

Certo

<?php /* code */ ?>

<?php echo $var; ?>

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Chaves

Errado

if(condition)

{

action1();

action2();

}

else

{

action3();

action4();

}

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Chaves

Certo

if ( condition ) {

action1();

action2();

} else {

action3();

action4();

}

Vinicius Massuchetto Plugins no WordPress

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Vetores

Errado

$x = $foo[$bar];

$x = $foo[ ’bar’ ];

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Primeiro PadraoArquivosPadroes de CodigoPadroes de SQL

Vetores

Certo

$x = $foo[ $bar ];

$x = $foo[’bar’];

Vinicius Massuchetto Plugins no WordPress

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Debug

Vinicius Massuchetto Plugins no WordPress

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

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

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

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

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

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Inicializacao

* init()

Geralmente atraves de um procedimento inicializador

Vinicius Massuchetto Plugins no WordPress

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

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Filtros de Consulta

posts where

posts join

posts orderby

posts groupby

Vinicius Massuchetto Plugins no WordPress

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

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

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

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

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

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

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

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

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

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

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Internacionalizacao

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

Vinicius Massuchetto Plugins no WordPress

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Tratamento de Erros

Vinicius Massuchetto Plugins no WordPress

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Classes e Funcoes Uteis

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Manipulacao de Dados

wp parse args

wp list filter

Vinicius Massuchetto Plugins no WordPress

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Transients API

set transient

get transient

delete transient

Vinicius Massuchetto Plugins no WordPress

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

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Classes Uteis

SimplePie

PHPMailer

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Funcoes Uteis

wp mail

fetch feed

human time diff

Vinicius Massuchetto Plugins no WordPress

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Liberando na comunidade

Vinicius Massuchetto Plugins no WordPress

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

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

EstruturaInterfacesScripts e EstilosFerramentasLiberando na Comunidade

Vinicius Massuchetto Plugins no WordPress

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

IntroducaoPadroes

DesenvolvimentoConsideracoes Finais

Vinicius Massuchetto Plugins no WordPress

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