SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Este é o primeiro slide, tipicamente serve
para ver se o projector está a funcionar e
para eu ter a certeza que estamos no início
da apresentação e não algures no meio,
porque é um pincel mostrar um slide do
meio numa sala cheira de gente e andar
feito parvo à procura do primeiro. Podia ter
criado um slide todo preto? Sim, podia, mas
não era a mesma coisa.
HOOKS
For fun and profit
@zedejose
HOOKS
Was ist das?
ÚQUES
Let’s look at the trailer
“pontos de saída” (opcionais) que
alteram o comportamento ou
resultado de outra função.
estão disponíveis no core do
WordPress, em plugins e temas
existentes ou no nosso próprio
código.
input
resultado
REWIND
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
the_title();
endwhile;
endif;
function the_title (…) {
$title = get_the_title();
// etc…
if ( $echo )
echo $title;
else
return $title;
}
/wp-includes/post-template.php
function get_the_title( $post = 0 ) {
// a bunch of stuff…
return $title;
}
$post
$title
EXEMPLO NO WORDPRESS
<
function get_the_title( $post = 0 ) {
// a bunch of stuff…
return apply_filters( 'the_title', $title, $id );
}
$post
$title
NO WORDPRESS, COM HOOK
“aplica os filtros que foram
definidos noutro sítio do
código (core, tema ou plugins)”
apply_filters
filtro_do_titulo( … )
$title (modificado)
filtro_do_titulo_2( … )
$title (modificado)
filtro_do_titulo_1( … )
filtro_do_titulo_3( … )
Tipos de Hooks
Filtros
&
Acções(aqui é sem AO90)
Filtros
devolvem uma versão modificada do resultado de uma função
são definidos com apply_filters(), executados com add_filter()
Acções
modificam parâmetros ou variáveis globais
são definidas com do_action(), executadas com add_action()
Anatomia de um filtro
return apply_filters( 'the_title', $title, $id );
add_filter( 'the_title', 'filtro_do_titulo', 10, 2 );
um novo filtro
Anatomia de um filtro
return apply_filters( 'the_title', $title, $id );
add_filter( 'the_title', 'filtro_do_titulo', 10, 2 );
a minha função
prioridade
respeitando a definição
Anatomia de um filtro
o que é a “prioridade”?
Define a prioridade de execução
de um filtro (10 por omissão)
Valores mais pequenos indicam
maior prioridade.
Anatomia de um filtro
// Cria o filtro e indica a função.
add_filter( 'the_title', 'ze_filtro_do_titulo', 10, 2 );
// Modifica o título, cada palavra começa com uma maiúscula.
function ze_filtro_do_titulo( $title, $id ) {
$novo_titulo = ucwords( $title );
return $novo_titulo;
}
a função
Anatomia de um filtro
uma única função do core !== um único filtro
get_the_title, por exemplo, aplica dois filtros:
protected_title_format
e
the_title
Anatomia de uma acção
do_action( 'pre_get_posts', $query );
add_action( 'pre_get_posts', 'ze_muda_query', 10, 1 );
semelhante a um filtro
ou
add_action( 'pre_get_posts', 'ze_muda_query' );
Anatomia de uma acção
// Cria a acção e indica a função.
add_action( 'pre_get_posts', 'ze_muda_query' );
// Modifica a query.
function ze_muda_query( $query ) {
$query->set( 'post_type', array( 'post', 'products' ) );
// Não tem return.
}
não devolve valores, altera qualquer coisa
T.P.C.
Preparar um Dry Martini* e ler a documentação sobre:
has_filter()
current_filter()
remove_filter()
remove_all_filters()
has_action()
do_action_ref_array()
did_action()
remove_action()
remove_all_actions()
* http://bit.ly/TheOneDryMartini
?
RESPIRAR
https://codex.wordpress.org/Plugin_API/Hooks
HOOKS
the funky stuff
Quem nunca?
add_action( 'wp_enqueue_scripts', 'mete_la_o_css' );
add_action( 'wp_enqueue_scripts', 'mete_la_o_javascript' );
pre_get_posts
superpoderes
Modifica qualquer um das
dezenas de parâmetros de
WP_Query
https://codex.wordpress.org/Class_Reference/WP_Query
“WP_Query is a class that deals with the intricacies of
a post's (or page's) request to a WordPress blog. The
wp-blog-header.php (or the WP class in Version 2.0)
gives the $wp_query object information defining the
current request, and then $wp_query determines
what type of query it's dealing with (possibly a
category archive, dated archive, feed, or search), and
fetches the requested posts.”
WP_Query
https://codex.wordpress.org/Class_Reference/WP_Query
https://gist.github.com/luetkemj/2023628
// Cria a acção e indica a função.
add_action( 'pre_get_posts', 'inclui_bolos_no_loop' );
// Modifica a query.
function inclui_bolos_no_loop( $query ) {
if ( $query->is_main_query() && ! is_admin() {
$query->set( 'post_type', array( 'post', ‘bolo' ) );
}
}
Eu é mais bolos
// Cria a acção e indica a função.
add_action( 'pre_get_posts', 'exclui_categoria_3' );
// Modifica a query.
function exclui_categoria_3( $query ) {
if ( $query->is_main_query() && ! is_admin() {
$query->set( 'category__not_in', array( 3 ) );
}
}
Excluir uma categoria
! is_admin()
http://rachievee.com/the-wordpress-hooks-firing-sequence/
Cuidado com a sequência
HOOKS
Não é só o core
HOOKS
E eu e eu e eu e eu?
Hooks no meu código
porquê?
Porque, por muito que queiras, o teu código
nunca vai fazer exactamente aquilo que
uma instalação específica pede.
E muito menos aquilo que todas as
instalações específicas, que usam o teu
código, pedem.
Hooks no meu código
como?
do_action( 'ze__a_minha_accao', $argumentos );
$variavel = apply_filters( 'ze__o_meu_filtro', $variavel );
ou
return apply_filters( 'ze__o_meu_filtro', $variavel );
Hooks no meu código
não esquecer
return apply_filters( 'the_title', $title, $id );
add_filter( 'the_title', 'filtro_do_titulo', 10, 2 );
a minha função
prioridade
Hooks no meu código
• Extensível
• Flexível
• Elegante
• Developer friendly: reduz a
quantidade de código

(é o developer quem decide o que juntar)
• Gluten-free?
Hooks no meu código
exemplo
<footer>
    <?php do_action( 'ze_antes_do_footer' ); ?>
    <!-- coisas no footer do tema. cenas e tal -->
    <?php do_action( 'ze_depois_do_footer' ); ?>
</footer>
Hooks no meu código
exemplo
function ze_imagem_do_post() {
// Só dento do loop, fáxavor.
if ( has_post_thumbnail() ) {
$thumbnail = get_the_post_thumbnail();  
return apply_filters( 'ze_filtro_imagem_do_post', $thumbnail );
}
}
o developer pode agora “mexer” nisto
?
@zedejose
Obrigado

Mais conteúdo relacionado

Mais procurados

Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIinfo_cimol
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHPzehzinho
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanosnobios
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend FrameworkJaime Neto
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009silva.edgar
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionaliMasters
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlPaulo Damas
 
Arrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIArrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIinfo_cimol
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesCarlos Santos
 
Hooks no WordPress
Hooks no WordPressHooks no WordPress
Hooks no WordPressFelipe Elia
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraFlávio Lisboa
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
ZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoMarcos Bezerra
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 

Mais procurados (20)

Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites II
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
 
J query javascript para seres humanos
J query   javascript para seres humanosJ query   javascript para seres humanos
J query javascript para seres humanos
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009
 
Bread board
Bread boardBread board
Bread board
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
Arrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIArrays PHP - Criação de sites II
Arrays PHP - Criação de sites II
 
Aula5
Aula5Aula5
Aula5
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - Funções
 
Java script aula 09 - JQuery
Java script   aula 09 - JQueryJava script   aula 09 - JQuery
Java script aula 09 - JQuery
 
Hooks no WordPress
Hooks no WordPressHooks no WordPress
Hooks no WordPress
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
ZF Básico - 6. Autenticação
ZF Básico - 6. AutenticaçãoZF Básico - 6. Autenticação
ZF Básico - 6. Autenticação
 
Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 

Semelhante a Hooks, o condimento mágico e escondido do WordPress

Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07Yuri Bispo
 
Como criar um plugin para WordPress
Como criar um plugin para WordPressComo criar um plugin para WordPress
Como criar um plugin para WordPressLeandrinho Vieira
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Ilton Barbosa
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteIlton Barbosa
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfGabrielaMota46
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016Leandro Silva
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jqueryYuri Costa
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão GeralKaio Valente
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 

Semelhante a Hooks, o condimento mágico e escondido do WordPress (20)

Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07
 
Como criar um plugin para WordPress
Como criar um plugin para WordPressComo criar um plugin para WordPress
Como criar um plugin para WordPress
 
Introdução ao JQuery e AJAX
Introdução ao JQuery e AJAXIntrodução ao JQuery e AJAX
Introdução ao JQuery e AJAX
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Dinamizando Sites Estáticos
Dinamizando Sites EstáticosDinamizando Sites Estáticos
Dinamizando Sites Estáticos
 
Introdução ao jquery
Introdução ao jqueryIntrodução ao jquery
Introdução ao jquery
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 

Mais de Zé Fontainhas

Desmistificando o WordPress - WordCamp Lisboa 2012
Desmistificando o WordPress - WordCamp Lisboa 2012Desmistificando o WordPress - WordCamp Lisboa 2012
Desmistificando o WordPress - WordCamp Lisboa 2012Zé Fontainhas
 
The Data Is Yours - WebFest 2012, Montenegro
The Data Is Yours - WebFest 2012, MontenegroThe Data Is Yours - WebFest 2012, Montenegro
The Data Is Yours - WebFest 2012, MontenegroZé Fontainhas
 
I Work From Home - Switch 2011, Porto
I Work From Home - Switch 2011, PortoI Work From Home - Switch 2011, Porto
I Work From Home - Switch 2011, PortoZé Fontainhas
 
Democracia Digital -A experiência de construção colaborativa da comunidade Wo...
Democracia Digital -A experiência de construção colaborativa da comunidade Wo...Democracia Digital -A experiência de construção colaborativa da comunidade Wo...
Democracia Digital -A experiência de construção colaborativa da comunidade Wo...Zé Fontainhas
 
Total World Domination with i18n (es)
Total World Domination with i18n (es)Total World Domination with i18n (es)
Total World Domination with i18n (es)Zé Fontainhas
 
Languages in WordPress
Languages in WordPressLanguages in WordPress
Languages in WordPressZé Fontainhas
 
Comunicação Interna na Automattic
Comunicação Interna na AutomatticComunicação Interna na Automattic
Comunicação Interna na AutomatticZé Fontainhas
 
Work From Home - Switch Conference 2011
Work From Home - Switch Conference 2011Work From Home - Switch Conference 2011
Work From Home - Switch Conference 2011Zé Fontainhas
 
Comunidades de Traducción - Wordcamp Spain
Comunidades de Traducción - Wordcamp SpainComunidades de Traducción - Wordcamp Spain
Comunidades de Traducción - Wordcamp SpainZé Fontainhas
 
BuddyPress - WordCamp Brazil 2009
BuddyPress - WordCamp Brazil 2009BuddyPress - WordCamp Brazil 2009
BuddyPress - WordCamp Brazil 2009Zé Fontainhas
 

Mais de Zé Fontainhas (10)

Desmistificando o WordPress - WordCamp Lisboa 2012
Desmistificando o WordPress - WordCamp Lisboa 2012Desmistificando o WordPress - WordCamp Lisboa 2012
Desmistificando o WordPress - WordCamp Lisboa 2012
 
The Data Is Yours - WebFest 2012, Montenegro
The Data Is Yours - WebFest 2012, MontenegroThe Data Is Yours - WebFest 2012, Montenegro
The Data Is Yours - WebFest 2012, Montenegro
 
I Work From Home - Switch 2011, Porto
I Work From Home - Switch 2011, PortoI Work From Home - Switch 2011, Porto
I Work From Home - Switch 2011, Porto
 
Democracia Digital -A experiência de construção colaborativa da comunidade Wo...
Democracia Digital -A experiência de construção colaborativa da comunidade Wo...Democracia Digital -A experiência de construção colaborativa da comunidade Wo...
Democracia Digital -A experiência de construção colaborativa da comunidade Wo...
 
Total World Domination with i18n (es)
Total World Domination with i18n (es)Total World Domination with i18n (es)
Total World Domination with i18n (es)
 
Languages in WordPress
Languages in WordPressLanguages in WordPress
Languages in WordPress
 
Comunicação Interna na Automattic
Comunicação Interna na AutomatticComunicação Interna na Automattic
Comunicação Interna na Automattic
 
Work From Home - Switch Conference 2011
Work From Home - Switch Conference 2011Work From Home - Switch Conference 2011
Work From Home - Switch Conference 2011
 
Comunidades de Traducción - Wordcamp Spain
Comunidades de Traducción - Wordcamp SpainComunidades de Traducción - Wordcamp Spain
Comunidades de Traducción - Wordcamp Spain
 
BuddyPress - WordCamp Brazil 2009
BuddyPress - WordCamp Brazil 2009BuddyPress - WordCamp Brazil 2009
BuddyPress - WordCamp Brazil 2009
 

Hooks, o condimento mágico e escondido do WordPress

  • 1. Este é o primeiro slide, tipicamente serve para ver se o projector está a funcionar e para eu ter a certeza que estamos no início da apresentação e não algures no meio, porque é um pincel mostrar um slide do meio numa sala cheira de gente e andar feito parvo à procura do primeiro. Podia ter criado um slide todo preto? Sim, podia, mas não era a mesma coisa.
  • 6. “pontos de saída” (opcionais) que alteram o comportamento ou resultado de outra função.
  • 7. estão disponíveis no core do WordPress, em plugins e temas existentes ou no nosso próprio código.
  • 9. if ( have_posts() ) : while ( have_posts() ) : the_post(); the_title(); endwhile; endif;
  • 10. function the_title (…) { $title = get_the_title(); // etc… if ( $echo ) echo $title; else return $title; } /wp-includes/post-template.php
  • 11. function get_the_title( $post = 0 ) { // a bunch of stuff… return $title; } $post $title EXEMPLO NO WORDPRESS
  • 12. < function get_the_title( $post = 0 ) { // a bunch of stuff… return apply_filters( 'the_title', $title, $id ); } $post $title NO WORDPRESS, COM HOOK
  • 13. “aplica os filtros que foram definidos noutro sítio do código (core, tema ou plugins)” apply_filters
  • 15. filtro_do_titulo_2( … ) $title (modificado) filtro_do_titulo_1( … ) filtro_do_titulo_3( … )
  • 17. Filtros devolvem uma versão modificada do resultado de uma função são definidos com apply_filters(), executados com add_filter() Acções modificam parâmetros ou variáveis globais são definidas com do_action(), executadas com add_action()
  • 18. Anatomia de um filtro return apply_filters( 'the_title', $title, $id ); add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); um novo filtro
  • 19. Anatomia de um filtro return apply_filters( 'the_title', $title, $id ); add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição
  • 20. Anatomia de um filtro o que é a “prioridade”? Define a prioridade de execução de um filtro (10 por omissão) Valores mais pequenos indicam maior prioridade.
  • 21. Anatomia de um filtro // Cria o filtro e indica a função. add_filter( 'the_title', 'ze_filtro_do_titulo', 10, 2 ); // Modifica o título, cada palavra começa com uma maiúscula. function ze_filtro_do_titulo( $title, $id ) { $novo_titulo = ucwords( $title ); return $novo_titulo; } a função
  • 22. Anatomia de um filtro uma única função do core !== um único filtro get_the_title, por exemplo, aplica dois filtros: protected_title_format e the_title
  • 23. Anatomia de uma acção do_action( 'pre_get_posts', $query ); add_action( 'pre_get_posts', 'ze_muda_query', 10, 1 ); semelhante a um filtro ou add_action( 'pre_get_posts', 'ze_muda_query' );
  • 24. Anatomia de uma acção // Cria a acção e indica a função. add_action( 'pre_get_posts', 'ze_muda_query' ); // Modifica a query. function ze_muda_query( $query ) { $query->set( 'post_type', array( 'post', 'products' ) ); // Não tem return. } não devolve valores, altera qualquer coisa
  • 25. T.P.C. Preparar um Dry Martini* e ler a documentação sobre: has_filter() current_filter() remove_filter() remove_all_filters() has_action() do_action_ref_array() did_action() remove_action() remove_all_actions() * http://bit.ly/TheOneDryMartini
  • 28. Quem nunca? add_action( 'wp_enqueue_scripts', 'mete_la_o_css' ); add_action( 'wp_enqueue_scripts', 'mete_la_o_javascript' );
  • 29. pre_get_posts superpoderes Modifica qualquer um das dezenas de parâmetros de WP_Query https://codex.wordpress.org/Class_Reference/WP_Query
  • 30. “WP_Query is a class that deals with the intricacies of a post's (or page's) request to a WordPress blog. The wp-blog-header.php (or the WP class in Version 2.0) gives the $wp_query object information defining the current request, and then $wp_query determines what type of query it's dealing with (possibly a category archive, dated archive, feed, or search), and fetches the requested posts.” WP_Query https://codex.wordpress.org/Class_Reference/WP_Query
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 39. // Cria a acção e indica a função. add_action( 'pre_get_posts', 'inclui_bolos_no_loop' ); // Modifica a query. function inclui_bolos_no_loop( $query ) { if ( $query->is_main_query() && ! is_admin() { $query->set( 'post_type', array( 'post', ‘bolo' ) ); } } Eu é mais bolos
  • 40. // Cria a acção e indica a função. add_action( 'pre_get_posts', 'exclui_categoria_3' ); // Modifica a query. function exclui_categoria_3( $query ) { if ( $query->is_main_query() && ! is_admin() { $query->set( 'category__not_in', array( 3 ) ); } } Excluir uma categoria
  • 42.
  • 45.
  • 46. HOOKS E eu e eu e eu e eu?
  • 47. Hooks no meu código porquê? Porque, por muito que queiras, o teu código nunca vai fazer exactamente aquilo que uma instalação específica pede. E muito menos aquilo que todas as instalações específicas, que usam o teu código, pedem.
  • 48. Hooks no meu código como? do_action( 'ze__a_minha_accao', $argumentos ); $variavel = apply_filters( 'ze__o_meu_filtro', $variavel ); ou return apply_filters( 'ze__o_meu_filtro', $variavel );
  • 49. Hooks no meu código não esquecer return apply_filters( 'the_title', $title, $id ); add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade
  • 50. Hooks no meu código • Extensível • Flexível • Elegante • Developer friendly: reduz a quantidade de código
 (é o developer quem decide o que juntar) • Gluten-free?
  • 51. Hooks no meu código exemplo <footer>     <?php do_action( 'ze_antes_do_footer' ); ?>     <!-- coisas no footer do tema. cenas e tal -->     <?php do_action( 'ze_depois_do_footer' ); ?> </footer>
  • 52. Hooks no meu código exemplo function ze_imagem_do_post() { // Só dento do loop, fáxavor. if ( has_post_thumbnail() ) { $thumbnail = get_the_post_thumbnail();   return apply_filters( 'ze_filtro_imagem_do_post', $thumbnail ); } } o developer pode agora “mexer” nisto
  • 53.
  • 54. ?